我想运行自定义的Worker
-NotificationWorker
-在设备上显示通知,然后设置日期和时间以使用WorkRequest
进行显示。
这是我加入WorkRequest
的方法,该方法在UI类中被调用(在我的应用程序中为Fragment):
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 毫秒(几乎没有延迟)。
这是我的工人班:
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
的{{1}}方法的最后一行中调试时,我设置了一个断点,但是程序不会在那里暂停。我想念什么吗?
答案 0 :(得分:0)
没关系,这可以通过通过setSmallIcon(icon)
在通知中设置一个小图标来解决。之后,通知会完美显示。