Я хочу назначить работнику показ уведомлений, когда устройство подключено и подключено к Интернету. - PullRequest
0 голосов
/ 29 октября 2018

Хорошо, я думаю, что название довольно очевидно ... Я должен использовать API-интерфейс WorkManager, чтобы запланировать уведомление, которое будет отображаться каждый раз, когда устройство подключено к Интернету и заряжается (подключается). Мне удалось создать работника и заставить его отображать уведомление, но проблема в том, что он показывает уведомление только один раз. После этого, даже если я отключу / повторно подключусь к Wi-Fi и отключу / подключу кабель, уведомление не будет отображаться.

val notificationTriggerConstraint = Constraints.Builder()
            .setRequiredNetworkType(NetworkType.UNMETERED)
            .setRequiresCharging(true)
            .build()
    val notificationWorker = OneTimeWorkRequest.Builder(NotificationWorker::class.java)
            .setConstraints(notificationTriggerConstraint)
            .build()

class NotificationWorker(@NonNull context: Context, @NonNull workerParameters: WorkerParameters) : Worker(context, workerParameters) {
override fun doWork(): Result {

    val notificationBuilder = NotificationCompat.Builder(applicationContext, "CHANNEL")
            .setSmallIcon(R.drawable.ic_notification)
            .setContentTitle("Background job")
            .setContentText("Device is charging and connected to WIFI")
            .setStyle(NotificationCompat.BigTextStyle().bigText("Device is charging and connected to WIFI"))
            .setPriority(NotificationCompat.PRIORITY_DEFAULT)
    val notificationManager = NotificationManagerCompat.from(applicationContext)
    notificationManager.notify(0, notificationBuilder.build())

    return Result.SUCCESS
}}

Это ограничения и работник, который создает уведомление. Я не могу использовать PeriodicWorkRequest, так как приложение не должно работать. Кто-нибудь может предложить подход здесь? Спасибо

1 Ответ

0 голосов
/ 30 октября 2018

Я не думаю, что WorkManager - лучший вариант в этом случае.

В вашем конкретном случае вы используете OneTimeWorkRequest, поэтому, как только он запустится WorkManager, вам нужно снова поставить его в очередь (но сложно поставить его в очередь, только если одно из двух ограничений является ложным).

Лучше всего было бы использовать комбинацию BatteryManager и ConnectivityManager.

...