Android Worker有时不发送通知

时间:2019-08-26 11:36:01

标签: android kotlin notifications worker android-workmanager

背景:我们创建了一个用于跟踪您的工作时间的应用,您到达时按签入,当您到达时按签出你走。我们认为,如果用户可以设置提醒来签入或签出,那将是很好的。由于我们需要有关用户当前签入状态的数据以显示正确的文本,因此我们不能只是安排通知,我们需要首先从在线数据库中获取数据,然后决定要显示的内容,因此我们需要一个工作管理器。

尽管日志消息显示后台工作已成功完成,但有时仍未显示一个通知(签到时间),而应该显示另一则通知(签出时间)。

我正在使用具有最新更新(Android 9)的Samsung Galaxy S9 +。

我尝试通过ADB检查计划的作业。有时它们会以正确的延迟出现,并且一切都在其中,有时它们根本不存在,但是无论如何都会收到通知,因此并不是那么可靠。

在每种情况下,我都使用调试器进行了调度,并且一切都按照我的预期进行了设置:将新的班次添加到数组中,并填充了预期的数据,在正确的时间安排了工作。编辑后,旧作品会被UUID取消,然后创建新作品。删除后,工作将被取消,并且班次设置为空。

首先,我需要安排工作进行特定的轮班。 Shift具有属性shiftFromshiftTo和那些时间的计划通知的UUID。为了安排工作人员,我有一个NotificationScheduler类的scheduleWeekly方法,在其中确定延迟,然后安排工作:

val sendNotificationRequest = PeriodicWorkRequestBuilder<NotificationsWorker>(7, TimeUnit.DAYS)
                .setInputData(
                    workDataOf(
                        NotificationsWorker.TITLE_PARAM to title,
                        NotificationsWorker.CONTENT_PARAM to content,
                        NotificationsWorker.ACTION to action // this tells the worker wheter the user is supposed to check in or check out when it's triggered
                    )
                )
                .setInitialDelay(initialDelayMinutes, TimeUnit.MINUTES) // wanted time - current time converted to minutes
                .build()

            WorkManager.getInstance(context).enqueue(sendNotificationRequest)

被触发时,它将调用NotificationsWorker。根据当前的签到状态以及用户应该签入还是签出,我决定在通知中显示哪些文本。另外,我创建的日志消息也会被记录-该工作确实是在正确的时间触发的。

然后我使用此方法发送通知:

private fun sendNotification(title: String, content: String) {
        val notificationIntent = Intent(context, SplashActivity::class.java) // for when the notification is clicked

        notificationIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)

        val intent = PendingIntent.getActivity(
            context, 0,
            notificationIntent, 0
        )

        val builder =
            NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID)
                .setSmallIcon(package.appname.R.drawable.ic_app_icon)
                .setContentTitle(title)
                .setContentText(content)
                .setContentIntent(intent)
                .setAutoCancel(true)
                .setStyle(NotificationCompat.BigTextStyle().bigText(content))
                .setPriority(NotificationCompat.PRIORITY_DEFAULT)

        with(NotificationManagerCompat.from(context)) {
            notify(0, builder.build())
        }
    }

我期望的是通知从计划的时间起-10分钟到达,这基本上是发生的,但是有时它们根本没有到达,有时我会在非常奇怪的时候收到(例如,我有人说我应该在星期六22:12办理登机手续,但轮班安排在星期一至星期五8-16进行。)

此外,周六提到的通知以某种方式设法获取了有关我的登机状态的数据,但是我没有互联网连接,并且当前通知都没有接收到本地数据。

0 个答案:

没有答案