2013-07-15 2 views
3

Я пишу код для непрерывного получения информации о всех точках доступа в диапазоне.Чтобы проверить, завершено ли тестирование wifi

Вот мой код:

 myRunnable = new Runnable() { 
     @Override public void run() { 
     while(){ 
     wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
     wifi.startScan(); 
     List<ScanResult>results= wifi.getScanResults(); 
     try{ 
      //data Logging 
      } 
      } 
     } 
     }; 

     myThread = new Thread(myRunnable); 
     myThread.start(); 

Как сканирование и регистрация данных непрерывных неоднократно, я хочу, чтобы проверить, является ли сканирование завершено, прежде чем каротажных данных. Есть ли какой-либо флаг или функция, которая проверяет, что wifi.startScan() завершена или нет, перед записью данных. Не могли бы вы помочь мне с кодом.

ответ

1

Вам необходимо ввести BroadcastReceiver, проверив результаты сканирования, полученные от WifiManager.startScan(). onReceive() позволяет напрямую получать результаты сканирования. Для завершения сканирования требуется около 1 секунды и запуск onReceive() ...

+0

Из моего опыта на некоторых устройствах требуется с 25 + секунд. – naXa

4

Я хочу проверить, завершено ли сканирование до регистрации данных. Есть там какой-либо флаг или функция, которая проверяет наличие wifi.startScan(), является полностью или нет, прежде чем регистрировать данные. Не могли бы вы мне помочь с кодом.

Да, для этой цели предусмотрен механизм. Чтобы достичь своей цели, вам необходимо реализовать BroadcastReceiver, который будет прослушивать WiFi сканирует.

Все, что вам нужно, это создать BroadcastReceiver с соответствующими IntentFilter. Поэтому вам необходимо это действие для фильтра:

WifiManager.SCAN_RESULTS_AVAILABLE_ACTION 

Это действие означает, что проверка точки доступа завершена, и результаты доступны. А затем просто создайте BroadcastReceiver (статически или динамически, это не имеет значения).

Если вы не знаете, как начать, посмотрите на этот учебник:

0

Чтобы создать на ответы выше, я просто хотел бы добавить соответствующий код, чтобы дать пример.

1. Регистрация на событие

// don't forget to set permission to manifest 
wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
context.registerReceiver(this,new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)); 
//check if WIFI is enabled and whether scanning launched 
if(!wifiManager.isWifiEnabled() || !wifiManager.startScan()) 
{ 
    throw new Exception("WIFI is not enabled"); 
} 

2. Получение результата

Чтобы получить объект зарегистрирован (в данном случае это) необходимо расширить BroadcastReceiver и осуществить следующие метод:

public void onReceive(Context context, Intent intent) { 
     List<ScanResult> result = wifiManager.getScanResults(); 
}