startcan() имеет результат через 10 минут, когда телефон переходит в состояние ожидания

Я пытаюсь сканировать сети Wi-Fi каждые 2 минуты. Я использую сервис для этого. Когда телефон «активен» или «используется» после звонка startscan(), я получаю SCAN_RESULTS_AVAILABLE_ACTION через 6 секунд. Так что я могу периодически сканировать Wi-Fi. Но после того, как к телефону в течение определенного времени (10 мин) никто не прикасался, startscan() перестает "работать" и только через 10 мин получает результат. Кто-нибудь испытал это?


person laplasz    schedule 13.02.2013    source источник


Ответы (1)


В соответствии с это я нашел решение - это потому, что политика сна Wi-Fi. Вы можете настроить ваше Wi-Fi-устройство так, чтобы оно никогда не переходило в спящий режим:

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 это тоже работает:
вы можете периодически включать и отключать Wi-Fi:

WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
if(wm.isWifiEnabled() == false) {
    wm.setWifiEnabled(true);
}

затем сканируйте после того, как ваш широковещательный приемник получит действие, содержащее WIFI_STATE_ENABLED дополнительных

person laplasz    schedule 16.02.2013
comment
+1 хорошо - см. мой вопрос на getScanResults(); здесь. Кроме того, предположим, что вы включили беспроводную связь, а затем хотите снова отключить ее после сканирования — что, если пользователь включил ее во время сканирования (поэтому вам не следует ее отключать)? Есть ли способ узнать? - person Mr_and_Mrs_D; 22.04.2013