用例:我正在开发允许用户设置的应用功能 每周在不同时间/每天重复提醒,这将在执行时创建通知。此提醒不容错过,因此应用程序即使处于DOZE模式也应该唤醒手机。代码(根据我在下面指出的链接)是在几年前完成的,一切正常,但是在针对较新的API时,我面临以下问题。
问题:WakefulBroadcastReceiver 已弃用。
我试图在这里搜索“[android] AlarmManager jobscheduler WakefulBroadcastReceiver”或在谷歌搜索,但是没有找到解决这个问题的任何内容。
我看到数百个帖子讨论了使用AlarmManager和JobScheduler的问题。 但我很难找到真正的警报调度来实现提醒应用程序。
我看到的here,here,here和here是解决此问题的非常古老的例子。但都依赖于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时,它被禁止,没有任何反应。
答案 0 :(得分:-1)
这似乎是一个常见的用例,我也在为此苦苦挣扎。我找到的唯一有希望的答案是ViciDroid在https://www.reddit.com/r/androiddev/comments/71arjj/im_confused_about_android_o_and_task_execution/的评论中 本质上,ViciDroid建议: “自己进行唤醒锁定并从常规广播接收器扩展。Google文档提供了PowerManager的示例代码。这与在WakefulBroadcastReceiver成为现实之前必须执行的操作相同。
由于隐式禁止广播,还明确注册了广播。”
我还没有尝试过,但是听起来很有希望-希望很快能尝试并回报。