我正在尝试每 2 分钟扫描一次 wifi 网络。我正在为此使用服务。当电话在通话后“活动”或“正在使用”时,startscan()
我会SCAN_RESULTS_AVAILABLE_ACTION
在 6 秒内到达。所以我可以定期扫描wifi。但是在电话没有被任何人触摸一段时间(10 分钟)后 startscan() 停止“工作”并且只有在 10 分钟后才得到结果。有人经历过吗?
问问题
2592 次
1 回答
3
据此,我找到了解决方案 - 这是因为Wifi sleep policy。您可以通过以下方式设置您的 wifi 设备永远不会进入睡眠状态:
Settings.System.putInt(getContentResolver(),
Settings.System.WIFI_SLEEP_POLICY,
Settings.System.WIFI_SLEEP_POLICY_NEVER);
请确保,您在AndroidManifest.xml
文件中添加了此权限:
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
扫描周期为 5-15 秒 - 这是自动的 - 您无需调用startscan()
。有关 Android 扫描过程的更多信息,请参见此处。
编辑:
如果您只想扫描热点,这可能是更好的解决方案:
WIFI_MODE_SCAN_ONLY
- 它可以通过以下方式激活:
WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiLock wifiLock = wm.createWifiLock(WifiManager.WIFI_MODE_SCAN_ONLY , "MyWifiLock");
if(!wifiLock.isHeld()){
wifiLock.acquire();
}
不要忘记释放它,关于WifiLock
这里
的更多信息
也定义了这个权限:
<uses-permission android:name="android.permission.WAKE_LOCK"/>
Edit2这也有效:
您可以定期启用和禁用 wifi:
WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
if(wm.isWifiEnabled() == false) {
wm.setWifiEnabled(true);
}
然后在您的广播接收器获得包含WIFI_STATE_ENABLED
额外的操作后扫描
于 2013-02-16T13:39:01.687 回答