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