Androidx: метод постановки в очередь WorkManager не запускает Worker - PullRequest
0 голосов
/ 23 февраля 2019

Я хочу запустить пользовательский Worker - NotificationWorker - который показывает уведомление на устройстве, и я устанавливаю дату и время для его отображения, используя WorkRequest.

Это мойметод для постановки в очередь WorkRequest, который вызывается в классе пользовательского интерфейса (в моем приложении это фрагмент):

fun notifyUserAt(dt: LocalDateTime, title: String, text: String) {
    val epoch = DateUtil.toEpochMilli(dt)
    val now = DateUtil.toEpochMilli(
        ZonedDateTime.now(AppRepository.zoneId).toLocalDateTime()
    )
    val delay = epoch - now + 10

    val data: Data = Data.Builder()
        .putString(NOTIF_TITLE, title)
        .putString(NOTIF_CONTENT_TEXT, text)
        .putLong(NOTIF_DATETIME, epoch)
        .build()

    val constraints: Constraints = Constraints.Builder()
        .setRequiredNetworkType(NetworkType.NOT_REQUIRED)
        .setRequiresCharging(false)
        .build()

    val notificationWork = OneTimeWorkRequestBuilder<NotificationWorker>()
        .setInputData(data)
        .setConstraints(constraints)
        .setInitialDelay(delay, TimeUnit.MILLISECONDS)
        .build()

    WorkManager.getInstance().enqueue(notificationWork)
}

Обратите внимание, что переменная delay установлена ​​в 10 миллисекунд (очень близко к отсутствию задержки) при тестировании.

Это мой класс Worker:

class NotificationWorker(val context: Context, params: WorkerParameters) :
    Worker(context, params) {

    override fun doWork(): Result {

        // Get data
        val title = inputData.getString(NOTIF_TITLE)
        val contentText = inputData.getString(NOTIF_CONTENT_TEXT)
        val epoch = inputData.getLong(NOTIF_DATETIME, 0L)

        // Build the notification
        val mNotification =
            NotificationCompat.Builder(context, NORMAL_CHANNEL_ID)
                .setContentTitle(title)
                .setContentText(contentText)
                .setPriority(NotificationCompat.PRIORITY_HIGH)
                .setContentIntent(overviewScreenIntent(context, epoch))
                .setAutoCancel(true)
                .build()!!

        val id = newNotificationId
        NotificationManagerCompat.from(context)
            .notify(id, mNotification)

        return Result.success()
    }

Я установил точку останова при отладке в последней строкеdoWork метод в моем NotificationWorker, но программа там не останавливается.Я что-то пропустил?

1 Ответ

0 голосов
/ 23 февраля 2019

Неважно, это решается установкой небольшого значка для уведомления через setSmallIcon(icon).После этого уведомления отображаются отлично.

...