1

我正在尝试每 2 分钟扫描一次 wifi 网络。我正在为此使用服务。当电话在通话后“活动”或“正在使用”时,startscan()我会SCAN_RESULTS_AVAILABLE_ACTION在 6 秒内到达。所以我可以定期扫描wifi。但是在电话没有被任何人触摸一段时间(10 分钟)后 startscan() 停止“工作”并且只有在 10 分钟后才得到结果。有人经历过吗?

4

1 回答 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 回答