Одноразовый запрос на работу не выполняется должным образом в Oppo A3s - PullRequest
0 голосов
/ 02 августа 2020

У меня есть одноразовый запрос на работу, который вызывает себя в конце 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?

...