我想安排一個無線掃描每1秒,因爲每個掃描結果之間的當前6秒延遲對我來說太長。我認爲它有效,但我幾乎不瞭解它的工作方式或結果。 這裏是告訴定時器每1000毫秒開始wifiMgr.startScan();
的基本代碼。使用無線掃描定時器的意外結果android
private void startNetworkScan() {
mTimer = new Timer();
mTimer.schedule(new TimerTask() {
@Override
public void run() {
TimerMethod();
}
}, 0, 1000);
}
private void TimerMethod() {
this.runOnUiThread(rTimer);
}
private Runnable rTimer = new Runnable() {
public void run() {
wifiMgr.startScan();
Bundle bb = wifiScanReceiver.getResultExtras(true);
txtList.append("Result " + bb.getString("scanresult") + "\n");
}
};
下面是BroadcastReceiver類的代碼。我只是顯示來自接入點的時間戳和相關信息。
private void handleScanResultsAvailable() {
List<ScanResult> results = wifiMgr.getScanResults();
String currentTimeStr = new SimpleDateFormat("HH:mm:ss").format(new Date());
Bundle b = new Bundle();
StringBuilder sb = new StringBuilder();
sb.append(i + ": " + currentTimeStr);
for (ScanResult result : results) {
sb.append(String.format(" SSID: %s, RSSI: %s dBm ", result.SSID, result.level));
}
b.putString("scanresult", sb.toString());
setResultExtras(b);
i++;
}
這裏是結果的一個片段:
Result 1: 10:04:12 SSID: XXXXX, RSSI: -88 dBm
Result 1: 10:04:12 SSID: XXXXX, RSSI: -88 dBm
Result 2: 10:04:14 SSID: XXXXX, RSSI: -87 dBm
Result 2: 10:04:14 SSID: XXXXX, RSSI: -87 dBm
晴每個結果顯示每1-2秒,這是相當不錯的。我不明白的是,對於每個結果,我總是會得到兩條具有相同值的行。其實,我想到的是應該有一些重疊的結果,因爲wifiMgr.startScan()
不是由定時器在每一個執行停止,就像這樣:
// there are ca. 6-7 lines for every record
// as the wifi scanresult delay is 6 secs
Result 1: 10:03:40 SSID: XXXXX, RSSI: -85 dBm
Result 1: 10:03:41 SSID: XXXXX, RSSI: -85 dBm
Result 1: 10:03:42 SSID: XXXXX, RSSI: -85 dBm
Result 1: 10:03:43 SSID: XXXXX, RSSI: -85 dBm
Result 1: 10:03:44 SSID: XXXXX, RSSI: -85 dBm
Result 1: 10:03:45 SSID: XXXXX, RSSI: -85 dBm
Result 2: 10:03:45 SSID: XXXXX, RSSI: -85 dBm
Result 1: 10:03:46 SSID: XXXXX, RSSI: -85 dBm
Result 2: 10:03:46 SSID: XXXXX, RSSI: -85 dBm
Result 1: 10:03:47 SSID: XXXXX, RSSI: -85 dBm
Result 2: 10:03:47 SSID: XXXXX, RSSI: -85 dBm
Result 1: 10:03:48 SSID: XXXXX, RSSI: -85 dBm
Result 2: 10:03:48 SSID: XXXXX, RSSI: -85 dBm
任何人都可以提供一些線索? - 代碼正確,結果不錯。希望對其背後的邏輯有任何解釋。
更新:這裏是廣播接收器的其餘代碼。
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equalsIgnoreCase(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {
handleScanResultsAvailable();
}
}
是的,它會顯示更多比一個結果行一個SSID。我上面附加的結果只顯示了一個SSID,因爲當我測試它時,應用程序只檢測到一個SSID。以前沒有定時器,我在handleScanResultsAvailable中輸出結果,但它顯示正常的輸出,就像我沒有使用定時器一樣。我在這裏發佈日誌輸出,http://pastebin.com/zFjfuL7t感謝您花時間! – springrolls 2011-02-01 09:01:41