【问题标题】:startscan() has result after 10 min when phone get into idle statestartscan() 在手机进入空闲状态 10 分钟后有结果
【发布时间】:2013-02-13 20:01:03
【问题描述】:

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

【问题讨论】:

    标签: android wifi wifimanager network-scan


    【解决方案1】:

    根据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();
    }
    

    别忘了发布它,更多关于WifiLockhere的信息
    还要定义这个权限:

    <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 extra 的操作后进行扫描

    【讨论】:

    • +1 很好 - 在getScanResults(); here 上查看我的问题。另外-假设您启用了无线,然后您想在扫描后重新禁用它-如果用户在您扫描时启用了它怎么办(所以您不应该禁用它)?有没有办法知道?
    猜你喜欢
    • 2017-05-24
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 2019-08-27
    • 2011-09-12
    相关资源
    最近更新 更多