电话睡眠时的BroadcastReceiver行为

时间:2013-04-27 16:28:44

标签: android broadcastreceiver

我不太确定在清单中注册并通过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是动态注册的接收者 - 是否有任何地方列出这些意图?

1 个答案:

答案 0 :(得分:2)

  

我不太确定在清单中注册并通过PackageManager启用的BroadcastReceiver的行为是什么时候手机处于睡眠状态。

大多数广播都没有唤醒设备。

  

当手机入睡时,哪些广播可以保证唤醒接收器(如单独留下一段时间)

我怀疑你会在某个地方找到明确的清单。我能回忆起的唯一适合您描述的广播是SMS_RECEIVED以及通过AlarmManager和广播PendingIntent触发的任何广播。

  只要onReceive()运行

并保持手机清醒

SMS_RECEIVED可能有这种行为,但我不确定。 AlarmManager场景确实如此。

  

(当然不应该太长时间以避免ANR)。

它需要远远短于它,因为如果您碰巧有前景活动,它会冻结您的UI。需要将超过几毫秒的任何内容委托给具有后台线程的服务,例如我的WakefulIntentService

  

作为奖励,我最近了解到一些标记为FLAG_RECEIVER_REGISTERED_ONLY的意图仅发送给动态注册的接收者 - 是否有任何地方列出这些意图?

不,超出源代码。我想到的包括:ACTION_SCREEN_ONACTION_SCREEN_OFFACTION_BATTERY_CHANGED