android - startscan() 在手机进入空闲状态 10 分钟后有结果

标签 android wifi wifimanager network-scan

我尝试每 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

的 Action 后扫描

关于android - startscan() 在手机进入空闲状态 10 分钟后有结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14862018/

相关文章:

android - 如何查询 Firebase 数据库而不显示基于 bool 值的值

java - android: "onCreatedView"每次返回调用 "setUserVisibleHint"不调用

检查无线AP是否连接

java - wifiManager.getScanResults() 返回 0

android - 如何使用抽屉导航添加自定义操作栏?

android - Google protobuf 在解析字符串数据时在 Android 中崩溃

ios - 检查 iPad 是否能够路由到 Internet

Java CryptUnprotectData Windows WiFi 密码

android - Android 中的主动 wifi 监视器

Android 10 以下没有互联网的情况下,Android 会自动与 WiFi 断开连接