Запланируйте работника WorkManager из действия уведомления - PullRequest
0 голосов
/ 07 июня 2019

Документация по Android показывает, как запланировать WorkManager Worker программным способом так:

val uploadWorkRequest = OneTimeWorkRequestBuilder<UploadWorker>()
        .build()

WorkManager.getInstance().enqueue(uploadWorkRequest)

Но как вы должны планировать это, когда пользователь нажимает на действие уведомления?

Например, это код для запуска IntentService , когда пользователь нажимает на действие уведомления:

class ApiCallService : IntentService("ApiCallService") {
   // ...
}

val notificationBuilder = NotificationCompat.Builder(context,
            NOTIFICATION_CHANNEL_ID)

val saveIntent = Intent(context, ApiCallService::class.java)
val savePendingIntent = PendingIntent.getBroadcast(context,
                0, saveIntent, 0)

notificationBuilder.addAction(R.drawable.ic_done_white_24dp,
                context.getString(R.string.save),
                savePendingIntent)

Но вместо IntentService как предполагается ставить в очередь WorkManager Worker , когда пользователь нажимает на то же действие уведомления?

1 Ответ

0 голосов
/ 15 июня 2019

Для всех, кто интересуется, как я решил эту проблему, я создал дополнительный IntentService для планирования работы различных работников.

class WorkManagerService : IntentService("WorkManagerService") {
    override fun onHandleIntent(intent: Intent?) {
        when (intent?.action) {
            ACTION_SCHEDULE_WORKER1 -> {
                scheduleWorker1(intent)
            },
            ACTION_SCHEDULE_WORKER2 -> {
                scheduleWorker2(intent)
            }
        }
    }

    private fun scheduleWorker1(intent: Intent) {
        // ...

        val worker1 = OneTimeWorkRequestBuilder<Worker1>()
                .setConstraints(networkConstraint)
                .setInputData(workData)
                .build()

        WorkManager.getInstance().enqueue(worker1)
    }

    private fun scheduleWorker2(intent: Intent) {
        // ...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...