我的目标是能够扫描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)。也许我应该使用另一个动作?
感谢您的帮助。
答案 0 :(得分:1)
从字面上看,不,通常不会设计硬件,也不会编写低级驱动程序,以便在应用程序CPU处于睡眠模式时允许wifi运行 - 与移动网络接口的情况不同,后者旨在接收推送事件,如电话,短信和gmail“发痒”。
因此,您可以选择成功阻止设备休眠(再见电池)或使用闹钟定期唤醒,启动无线网络并轮询情况(仍然不利于电池寿命,但不是非常好)。
答案 1 :(得分:0)
我担心这种睡眠行为是由系统管理的(在Android 2.3.4上)设置>无线&网络> Wi-Fi设置> 按菜单>高级> Wi-Fi睡眠政策。
这实际上可能会违背用户的意愿,小心。
但是我认为必须有一种方法来修改这个参数。以编程方式,使用此设置:Settings.System,当然还有清单中的相应权限。