在睡眠模式下检查wifi网络信号

时间:2011-07-21 15:34:48

标签: android wifi wakelock android-wake-lock

我的目标是能够扫描Wi-Fi网络中的变化(主要是检查可用的网络)。知道我是通过注册接收者来做到的:

registerReceiver(wifiReceiver, new IntentFilter(WifiManager.RSSI_CHANGED_ACTION));

其中WifiReceiver是我的BroadcastReceiver

问题是它只在手机开机时才有效。一旦进入睡眠模式(通过按下电源按钮或一段时间后),接收器就会停止接收。我已经在我的主类的onCreate中获得了一个唤醒锁并在onDestroy中释放它(这是一个部分唤醒锁)。另外我试过这个:

Settings.System.putInt(getContentResolver(),Settings.System.WIFI_SLEEP_POLICY, Settings.System.WIFI_SLEEP_POLICY_NEVER);

让wifi无法入睡。不幸的是,这没有帮助。

是否有可能扫描网络更改,即使手机处于睡眠状态?我希望能够检查范围内的网络(通过SSID)。也许我应该使用另一个动作?

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

从字面上看,不,通常不会设计硬件,也不会编写低级驱动程序,以便在应用程序CPU处于睡眠模式时允许wifi运行 - 与移动网络接口的情况不同,后者旨在接收推送事件,如电话,短信和gmail“发痒”。

因此,您可以选择成功阻止设备休眠(再见电池)或使用闹钟定期唤醒,启动无线网络并轮询情况(仍然不利于电池寿命,但不是非常好)。

答案 1 :(得分:0)

我担心这种睡眠行为是由系统管理的(在Android 2.3.4上)设置>无线&网络> Wi-Fi设置> 按菜单>高级> Wi-Fi睡眠政策。

这实际上可能会违背用户的意愿,小心。

但是我认为必须有一种方法来修改这个参数。以编程方式,使用此设置:Settings.System,当然还有清单中的相应权限。