Я пытаюсь запланировать сканирование Wi-Fi каждую 1 секунду, так как текущая задержка в 6 секунд между каждым результатом сканирования слишком велика для меня.Я думаю, как-то это работает, но я едва понимаю, как это работает, или результат.Вот базовый код, указывающий таймеру запускать wifiMgr.startScan();
каждые 1000 мс.
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
Может кто-нибудь пролить свет?- это правильный код, это хороший результат.Буду признателен за любое объяснение логики, лежащей в основе этого.
Обновление : Вот и остальной код BroadcastReceiver.
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equalsIgnoreCase(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {
handleScanResultsAvailable();
}
}