如何在提醒应用程序中安排警报时替换已弃用的WakefulBroadcastReceiver?

时间:2018-06-13 15:12:23

标签: android alarmmanager android-pendingintent android-jobscheduler

用例:我正在开发允许用户设置的应用功能  每周在不同时间/每天重复提醒,这将在执行时创建通知。此提醒不容错过,因此应用程序即使处于DOZE模式也应该唤醒手机。代码(根据我在下面指出的链接)是在几年前完成的,一切正常,但是在针对较新的API时,我面临以下问题。

问题:WakefulBroadcastReceiver 已弃用

我试图在这里搜索“[android] AlarmManager jobscheduler WakefulBroadcastReceiver”或在谷歌搜索,但是没有找到解决这个问题的任何内容。

我看到数百个帖子讨论了使用AlarmManager和JobScheduler的问题。 但我很难找到真正的警报调度来实现提醒应用程序。

我看到的herehereherehere是解决此问题的非常古老的例子。但都依赖于WakefulBroadcastReceiver。

我想像JobScheduler这样的替代方案需要替换WakefulBroadcastReceiver,但也许不需要我的用例。

当触发警报时,我会做下一步:

  • 给出来自意图的输入参数,搜索领域数据库中的模型
  • 显示通知
  • 设置下一个警报(将再次查询数据库)

我可以这样做吗?

PendingIntent.getService(context, 30, intent, PendingIntent.FLAG_UPDATE_CURRENT);

其中Intent是一个简单的IntentService(实际上是WakefulBroadcastReceiver正在调用的那个),它完成onHandleIntent中的所有工作。

或者我需要使用某种机制来保持WAKE_LOCK?

更新1 :我刚刚发过this个帖子。看起来很有可能onHandleIntent中的内容没有足够的时间来执行。怎么知道我的时间?

更新2 :我已成功将AlarmManager与JobScheduler配对,以便在触发用户警报时,安排作业在后台检查数据库并显示通知,但在定位API 28时,它被禁止,没有任何反应。

1 个答案:

答案 0 :(得分:-1)

这似乎是一个常见的用例,我也在为此苦苦挣扎。我找到的唯一有希望的答案是ViciDroid在https://www.reddit.com/r/androiddev/comments/71arjj/im_confused_about_android_o_and_task_execution/的评论中 本质上,ViciDroid建议: “自己进行唤醒锁定并从常规广播接收器扩展。Google文档提供了PowerManager的示例代码。这与在WakefulBroadcastReceiver成为现实之前必须执行的操作相同。

由于隐式禁止广播,还明确注册了广播。”

我还没有尝试过,但是听起来很有希望-希望很快能尝试并回报。