Выполнение функций при закрытом приложении для создания уведомлений pu sh - PullRequest
0 голосов
/ 16 марта 2020

Я разрабатываю приложение для веб-просмотра, это веб-приложение с оболочкой android, которое обрабатывает биллинг Google Play для подписок, и в будущем уведомления pu sh.

служба новостей, поэтому мне нужно, чтобы приложение запускало функцию каждый час, которая отправляет запрос POST на мой сервер и получает ответ, если что-то новое, если есть, то создайте уведомление, сообщающее пользователю, чтобы открыть приложение. Я уверен, что это возможно, но я хочу как можно больше проверять это приложение в будущем, я знаю, что с android ~ 8 им не нравятся люди, использующие сервисы, когда приложение больше закрыто, и что мы должны использовать Задачи или что-то в этом роде, и я понятия не имею, как это сделать, поэтому мне нужна помощь. Спасибо!

РЕДАКТИРОВАНИЕ: Я искал дополнительные учебники и создал базовую задачу c, которая работает в фоновом режиме и знает, находится ли приложение на переднем плане или нет

в MainActivity. java:


    public void startAlarm() {
        manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
        int interval = 2000;

        manager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent);
        Toast.makeText(this, "Alarm Set", Toast.LENGTH_SHORT).show();
    }

    public void cancelAlarm() {
        if (manager != null) {
            manager.cancel(pendingIntent);
            Toast.makeText(this, "Alarm Canceled", Toast.LENGTH_SHORT).show();
        }
    }

в MainActivity. java внутри onCreate ():

startAlarm();

в NotificationReceiver. java:


import android.app.ActivityManager;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.NotificationManagerCompat;
import android.widget.Toast;

import java.util.List;

import static android.app.NotificationChannel.DEFAULT_CHANNEL_ID;


public class NotificationReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context arg0, Intent arg1) {
        // For our recurring task, we'll just display a message

        if (isAppForground(arg0)) {
            Toast.makeText(arg0, "I'm running in foreground", Toast.LENGTH_SHORT).show();

        } else {
            Toast.makeText(arg0, "I'm running in background", Toast.LENGTH_SHORT).show();
        }

    }



    public boolean isAppForground(Context mContext) {

        ActivityManager am = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks(1);
        if (!((List) tasks).isEmpty()) {
            ComponentName topActivity = tasks.get(0).topActivity;
            if (!topActivity.getPackageName().equals(mContext.getPackageName())) {
                return false;
            }
        }

        return true;
    }
}

В AndroidManifest. xml:

<uses-permission android:name="android.permission.GET_TASKS" />

Сейчас я пытаюсь научиться использовать уведомления, но документация Android довольно дерьмовая, поэтому любая помощь очень ценится.

...