Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 当手机处于睡眠状态时广播接收器行为_Android_Broadcastreceiver - Fatal编程技术网

Android 当手机处于睡眠状态时广播接收器行为

Android 当手机处于睡眠状态时广播接收器行为,android,broadcastreceiver,Android,Broadcastreceiver,我不太确定手机处于睡眠状态时,在清单中注册并通过PackageManager启用的BroadcastReceiver的行为是什么。出现这个问题是因为我需要一个注册的接收器,用于从WifiManager <receiver android:name=".receivers.ScanResultsReceiver" android:enabled="false" > <intent-filter> <action android:

我不太确定手机处于睡眠状态时,在清单中注册并通过
PackageManager
启用的
BroadcastReceiver
的行为是什么。出现这个问题是因为我需要一个注册的接收器,用于从
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>

动态注册的接收者-是否有任何地方列出这些意图

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

大多数广播不会唤醒设备

当手机进入睡眠状态时,哪些广播可以保证唤醒听筒(如在很长一段时间内保持孤独)

我怀疑你会在某处找到一份明确的清单。我能回忆起的唯一适合您描述的广播是收到的
SMS\u
,以及通过
AlarmManager
和广播
PendingEvent
触发的任何广播

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

有可能你收到的短信有这种行为,但我不能确定。
AlarmManager
场景确实如此

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

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

作为奖励,我最近了解到,一些仅标有FLAG_RECEIVER_REGISTERED_的意图只会传递给动态注册的接收者——有没有列出这些意图的地方


不,在源代码之外。我想到的包括:
ACTION\u SCREEN\u ON
ACTION\u SCREEN\u OFF
,和
ACTION\u电池更换了
,Uh-oh-所以我的接收器注册接收了
android.net.wifi.SCAN\u结果
android.net.wifi.wifi状态改变了
不会被唤醒?(接收器在WakefulIntentService中启用,由AlarmManager唤醒的接收器启动-此部分正常工作)。我会持有一个锁,但一旦服务启用(扫描结果)接收器,它就会死亡,当WIFI_状态更改(启用)时,(扫描结果)接收器会再次启动,然后当扫描结果可用时。@Mr_和Mrs_D:如果设备进入睡眠状态,WIFI也会进入睡眠状态,因此,如果有未完成的扫描,我不知道预期的行为是什么。我确实询问了a关于
getScanResults()
-但是在启用(ScanResults)接收器的唤醒服务中,我也获得了wifilock(类型为
WIFI\u MODE\u scan\u ONLY
)(在我更改(启用)WIFI\u状态后)在ScanResults接收器中,由于wifi锁定在禁用wifi的情况下毫无意义,AFAIK)-有时确实有效-但这一切都取决于接收器获得wifi状态和结果的广播-使用超时锁定是否提供了一种解决方法?他们会让设备保持清醒直到超时,还是在我的进程被终止(很可能是在我的服务完成执行后)时被清除@Mr_and_Mrs_D:你在WiFi方面比我迄今为止游荡得更深。由于操作系统版本或制造商对源代码的更改,这是一个未记录的行为区域,可能会对您造成伤害。“他们是让设备保持清醒直到超时,还是在我的进程被终止(很可能是在我的服务完成执行后)时被清除”--好吧,如果进程终止,不管超时,他们都会消失,但我没有尝试测试这一理论。