Workmanager не работает, когда приложение находится в фоновом режиме - PullRequest
0 голосов
/ 07 июля 2019

Я пытаюсь периодически запускать службу, даже если приложение убито или находится в фоновом режиме с помощью workManager.

Мой класс RequestService приведен ниже: -

public class RequestService extends Worker {

public RequestService(@NonNull Context context, @NonNull WorkerParameters workerParams) {
    super(context, workerParams);
}

@NonNull
@Override
public Result doWork() {

    displayNotification("MY Worker", "Background work Started");
    Log.i("BackJob","Running");
    return Result.SUCCESS;
}

private void displayNotification(String title, String task){

    NotificationManager notificationManager = (NotificationManager)getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);

    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
        NotificationChannel channel = new NotificationChannel("MyApp","My Notifications",
                                                    NotificationManager.IMPORTANCE_HIGH);

        notificationManager.createNotificationChannel(channel);
    }

    NotificationCompat.Builder notification = new NotificationCompat.Builder(getApplicationContext(), "My Notifications").
                                                    setContentTitle(title).setContentText(task)
                                                            .setSmallIcon(R.mipmap.ic_launcher);

    notificationManager.notify(130, notification.build());

}}

Это основной код активности: -

        final PeriodicWorkRequest WorkReq = new PeriodicWorkRequest.Builder(RequestService.class,15,TimeUnit.MINUTES).build();
        WorkManager.getInstance().enqueue(WorkReq);

Проблема в том, что если приложение убито или находится в фоновом режиме, то рабочий менеджер перестает работать. Я тестирую это на устройстве Samsung с Android версии пирога.

PS: - если приложение открыто, то я вижу уведомления непрерывно через 15 минут .... однако, как только я закрываю приложение ..... оно перестает работать ..... и больше нет уведомлений

Ответы [ 2 ]

0 голосов
/ 09 июля 2019

Это рабочий пример, который в настоящее время показывает любое уведомление относительно версии SO.Но, похоже, проблема может быть связана с методом notify из NotificationManagerCompat

private void makeStatusNotification(String message, Context context) {

    String channelId = context.getString(R.string.worker_sync_notif_channel_id);

    // Make a channel if necessary
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        // Create the NotificationChannel, but only on API 26+
        CharSequence name = context.getString(R.string.worker_sync_notif_channel_name);
        String description = context.getString(R.string.worker_sync_notif_channel_description);
        int importance = NotificationManager.IMPORTANCE_HIGH;
        NotificationChannel channel = new NotificationChannel(channelId, name, importance);
        channel.setDescription(description);
        // Add the channel
        NotificationManager notificationManager =
                (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

        if (notificationManager != null) {
            notificationManager.createNotificationChannel(channel);
        }
    }

    // Create the notification
    NotificationCompat.Builder builder = new NotificationCompat.Builder(context, channelId)
            .setSmallIcon(R.drawable.ic_cloud_upload)
            .setContentTitle(context.getString(R.string.worker_sync_notif_title))
            .setContentText(context.getString(R.string.worker_sync_notif_subject))
            .setStyle(new NotificationCompat.BigTextStyle()
                    .bigText(message))
            .setPriority(NotificationCompat.PRIORITY_HIGH)
            .setVibrate(new long[0])
            .setAutoCancel(true);

    // Show the notification
    NotificationManagerCompat.from(context).notify(NOTIFICATION_ID, builder.build());
}
0 голосов
/ 07 июля 2019

Согласно официальной документации PeriodicWorkRequest.Builder здесь

ИнтервалMillis должен быть больше или равен PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS

В настоящее время это значение установлено на 900000 мс, т. Е. 15 минут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...