我尝试每 2 分钟扫描一次 wifi 网络。我正在为此使用服务。当手机在 startscan()
调用后处于“Activity ”或“使用中”时,我会在 6 秒内得到 SCAN_RESULTS_AVAILABLE_ACTION
。所以我可以定期扫描无线网络。但是在手机没有被任何人触摸一段时间(10 分钟)后,startscan() 停止“工作”并且仅在 10 分钟后获得结果。有人经历过吗?
最佳答案
根据 this我找到了解决方案 - 这是因为 the 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 扫描过程的更多信息 here .
编辑:
如果您只想扫描热点,这可能是更好的解决方案:
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
的信息here
还定义此权限:
<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);
}
然后在你的 broadcastreceiver 得到包含 WIFI_STATE_ENABLED
extra
关于android - startscan() 在手机进入空闲状态 10 分钟后有结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14862018/