РЕДАКТИРОВАТЬ после того, как вы опубликовали свой код:
apdataList, похоже, не инициализирован в onCreate ()
добавить это в onCreate ():
apdataList = new List<APData>();
Минимальная задержка сканирования
Я думаю, что нет абсолютной минимальной задержки сканирования.Это слишком сильно зависит от производительности оборудования.
Я советую вам добавить опцию «Как можно быстрее» в ваши предпочтения, а затем использовать асинхронный цикл, который перезапускает сканирование, как только обнаруживаются новые результаты (см.фрагмент кода ниже, он был обновлен в соответствии с вашими потребностями).Таким образом, он будет ограничен только аппаратными характеристиками.
Также вы можете опросить ScanResults, используя WifiManager.getScanResults()
Рекомендуемый способ - запустить WifiManager.startScan()
и настроитьBroadcastReceiver для WifiManager.SCAN_RESULTS_AVAILABLE_ACTION
должен быть уведомлен, как только будут получены результаты сканирования.
Вот пример кода (заимствованный отсюда и адаптированный к вашим потребностям):
IntentFilter i = new IntentFilter();
i.addAction (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
registerReceiver(new BroadcastReceiver(){
public void onReceive(Context c, Intent i){
// Code to execute when SCAN_RESULTS_AVAILABLE_ACTION event occurs
WifiManager w = (WifiManager) c.getApplicationContext().getSystemService(Context.WIFI_SERVICE); //Use getApplicationContext to prevent memory leak
myScanResultHandler(w.getScanResults()); // your method to handle Scan results
if (ScanAsFastAsPossible) w.startScan(); // relaunch scan immediately
else { /* Schedule the scan to be run later here */}
}
}, i );
// Launch wifiscanner the first time here (it will call the broadcast receiver above)
WifiManager wm = (WifiManager)getApplicationContext.getSystemService(Context.WIFI_SERVICE);
boolean a = wm.startScan();