我不太确定在清单中注册并通过BroadcastReceiver
启用的PackageManager
的行为是在手机处于睡眠状态时。问题出现了,因为我需要一个从WifiManager
<receiver
android:name=".receivers.ScanResultsReceiver"
android:enabled="false" >
<intent-filter>
<action android:name="android.net.wifi.SCAN_RESULTS" />
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
</intent-filter>
</receiver>
但我想知道的内容(如链接到文档或google群组中的某些权威帖子)是哪些广播保证在手机入睡时唤醒接收器(如单独留下一段时间)并保持手机清醒只要onReceive()
运行(当然不应该太长以避免ANR)。
接收器可能是应用程序运行的唯一组件
作为奖励,我最近了解到,标记为FLAG_RECEIVER_REGISTERED_ONLY
的某些意图only delivered是动态注册的接收者 - 是否有任何地方列出这些意图?
答案 0 :(得分:2)
我不太确定在清单中注册并通过PackageManager启用的BroadcastReceiver的行为是什么时候手机处于睡眠状态。
大多数广播都没有唤醒设备。
当手机入睡时,哪些广播可以保证唤醒接收器(如单独留下一段时间)
我怀疑你会在某个地方找到明确的清单。我能回忆起的唯一适合您描述的广播是SMS_RECEIVED
以及通过AlarmManager
和广播PendingIntent
触发的任何广播。
只要onReceive()运行,并保持手机清醒
SMS_RECEIVED
可能有这种行为,但我不确定。 AlarmManager
场景确实如此。
(当然不应该太长时间以避免ANR)。
它需要远远短于它,因为如果您碰巧有前景活动,它会冻结您的UI。需要将超过几毫秒的任何内容委托给具有后台线程的服务,例如我的WakefulIntentService
。
作为奖励,我最近了解到一些标记为FLAG_RECEIVER_REGISTERED_ONLY的意图仅发送给动态注册的接收者 - 是否有任何地方列出这些意图?
不,超出源代码。我想到的包括:ACTION_SCREEN_ON
,ACTION_SCREEN_OFF
和ACTION_BATTERY_CHANGED
。