我是Android通知的新手,我有一个关于设备重启后如何仅重新启用关机前未通知的警报的问题。例如:
我从阅读有关设置BootReceiver / BroadcastReceiver的理解中知道,一旦设备重新启动,所有通知都将被取消,我将需要在BootReceiver中重新启用它们。如何确保仅重新启用第2天和第3天警报?
从概念上讲,我正在考虑两种可能性:选项1:每当出现警报通知时,无需打开应用程序,请修改数据库中的标志以指示警报已触发。然后在BootReceiver内部,根据该标志过滤数据库中的活动警报以重新启用。这可能吗?警报通知弹出时,需要对数据库进行操作,甚至不启动应用程序。
选项2:在BootReceiver内部,从数据库中筛选“警报时间>上次关闭时间”。似乎有一种方法可以使用Intent.ACTION_SHUTDOWN在SharedPreferences中存储上次关闭时间,但是我不确定这是否可靠,例如如果设备意外关闭,保存成功吗?
我不确定在这个用例中我是否走对了。任何建议或代码示例将不胜感激。
我有选项1可以工作。使用Google Codelab example,将存储库传递给sendNotification函数,并在末尾添加代码以修改数据库。
fun NotificationManager.sendNotification(messageBody: String, applicationContext: Context, repository: MyRepository) {
...
notify(NOTIFICATION_ID, builder.build())
val viewModelJob = Job()
val uiScope = CoroutineScope(Dispatchers.Main + viewModelJob)
uiScope.launch {
withContext(Dispatchers.IO) {
repository.updateNotificationStatus(id, true)
}
Timber.i("At the time when notification appears, database's status flag will change to true")
}
}