2

我不太确定 a 的行为是什么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>

但我想知道的(如链接到文档或谷歌群组中的一些权威帖子)是哪些广播可以保证在手机睡着时唤醒接收器(如在很长一段时间内单独放置)并保持只要onReceive()运行,手机就会保持清醒(当然,这不应该太长以避免 ANR)。
接收器很可能是应用程序运行的唯一组件
作为奖励,我最近了解到一些带有 标记的意图FLAG_RECEIVER_REGISTERED_ONLY传递给动态注册的接收器 - 有没有列出这些意图的地方?

4

1 回答 1

2

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

大多数广播不会唤醒设备。

当手机睡着时,哪些广播可以保证唤醒接收器(就像在很长一段时间内单独放置一样)

我怀疑你会在某个地方找到一份明确的清单。我能记得的唯一符合您描述的广播是和任何通过和广播SMS_RECEIVED触发的。AlarmManagerPendingIntent

并在 onReceive() 运行期间保持手机处于唤醒状态

有可能SMS_RECEIVED有这种行为,但我不确定。这种AlarmManager情况肯定会。

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

它需要比这短得多,因为如果你碰巧有前台活动,它会冻结你的 UI。任何超过几毫秒的时间都需要委托给具有后台线程的服务,例如 my WakefulIntentService.

作为奖励,我最近了解到一些标有 FLAG_RECEIVER_REGISTERED_ONLY 的意图仅交付给动态注册的接收者 - 有没有列出这些意图的地方?

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

于 2013-04-27T16:58:47.420 回答