2013-07-15 42 views
3

我正在編寫一個代碼,以便連續獲取範圍內所有接入點的信息。要檢查無線掃描是否完成

這裏是我的代碼:

 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(); 
}