PeriodicWorkRequest не работает - почему? - PullRequest
0 голосов
/ 25 сентября 2019

Я использую PeriodicWorkRequest с Workmanger для отправки локального уведомления каждые 2 часа из приложения.Но ничего не происходит.Как только я открываю приложение, метод doWork () получает вызов, и уведомление появляется, но не тогда, когда приложение находится в фоновом режиме или удалено из истории последних приложений

 Constraints constraints = new Constraints.Builder()
            .setRequiresCharging(false)
            .setRequiresDeviceIdle(true)
            .setRequiresBatteryNotLow(true)
            .setRequiredNetworkType(NetworkType.CONNECTED)
            .build();


    final PeriodicWorkRequest periodicWorkRequest
            = new PeriodicWorkRequest.Builder(ShowNotificationJob.class, 2, TimeUnit.HOURS)
            .setConstraints(constraints)
            .build();

    WorkManager.getInstance(this).enqueueUniquePeriodicWork(TASK_ID,
            ExistingPeriodicWorkPolicy.REPLACE, periodicWorkRequest);

1 Ответ

0 голосов
/ 25 сентября 2019

Убедитесь, что вы используете стабильную версию библиотеки Workmanager https://developer.android.com/jetpack/androidx/releases/work#declaring_dependencies

Удалите эти constraints, если они не требуются

https://developer.android.com/reference/androidx/work/Constraints.Builder

Использование этих ограничений может быть причиной того, что они не будут работать в фоновом режиме, поэтому убедитесь, что вы используете эти ограничения в качестве требования

и используете ExistingPeriodicWorkPolicy.KEEP вместо ExistingPeriodicWorkPolicy.REPLACE - это не приведет к созданию нового объектаесли менеджер по работе

.setRequiresCharging(false)
                .setRequiresDeviceIdle(true)
                .setRequiresBatteryNotLow(true)
                .setRequiredNetworkType(NetworkType.CONNECTED)

Итоговый код

Constraints constraints = new Constraints.Builder()
            .build();


final PeriodicWorkRequest periodicWorkRequest
                = new PeriodicWorkRequest.Builder(ShowNotificationJob.class, 2, TimeUnit.HOURS)
                .setConstraints(constraints)
                .build();

        WorkManager.getInstance(this).enqueueUniquePeriodicWork(TASK_ID,
                ExistingPeriodicWorkPolicy.KEEP, periodicWorkRequest);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...