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

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

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 дополнительный

Другие вопросы по тегам