我想安排一个无线扫描每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