У меня есть одноразовый запрос на работу, который вызывает себя в конце doWork (), чтобы mimi c слушал работника. Когда я закрываю свое приложение, это выполняется каждые 5 минут (устанавливается как начальная задержка при создании запроса на работу). Но через некоторое время он запускается не так часто, как раньше. Даже когда приложение запущено или когда у меня есть уведомление на переднем плане, а приложение все еще находится на экране последних. Я читал статьи о том, что у китайских OEMS есть эта проблема, и единственное решение - занести приложение в белый список. Я получаю разрешение IGNORE_BATTERY_OPTIMIZATIONS_REQUESTS и вручную заносю приложение в белый список, как указано [здесь] 1
Вот код для Worker.
class DailyNotificationWorker(appContext: Context, workerParams: WorkerParameters)
: Worker(appContext, workerParams) {
override fun doWork(): Result {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val serviceChannel = NotificationChannel(
NOTIFICATION_CHANNEL_ID,
"Notifications",
NotificationManager.IMPORTANCE_DEFAULT
)
val manager = applicationContext.getSystemService(NotificationManager::class.java)
manager?.createNotificationChannel(serviceChannel)
}
val notificationBuilder =
NotificationCompat.Builder(applicationContext, NOTIFICATION_CHANNEL_ID)
.setLargeIcon(
BitmapFactory.decodeResource(
applicationContext.resources,
R.mipmap.ic_launcher_round
)
)
.setSmallIcon(R.drawable.ic_notification)
.setContentTitle("title")
.setContentText("body")
.setStyle(NotificationCompat.BigTextStyle().bigText(body))
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent)
.setColor(ContextCompat.getColor(applicationContext, R.color.colorPrimary))
val notificationManager =
applicationContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.notify(4, notificationBuilder.build())
val DailyGoalNotificationRequest: WorkRequest =
OneTimeWorkRequestBuilder<DailyNotificationWorker>()
.setConstraints(mConstraints)
.setInitialDelay(5, MINUTES)
.build()
WorkManager.getInstance(applicationContext).enqueue(DailyGoalNotificationRequest)
return Result.success()
}
Есть что-нибудь что можно сделать, чтобы гарантировать выполнение работника, как обещал Google?