Frage

Ich habe einen Wi-Fi-Scanner erstellt. Es wird ständig nach verfügbaren Wi-Fi-Netzwerken untersucht. Aber meine Frage ist, warum genau der Rundfunk -Empfänger benötigt wird, wenn ich tatsächlich Scaning ausführen kann (aufrufen startScan() mit Timer alle x Sekunden) und die gleichen Ergebnisse erhalten, ohne Broadcast -Empfänger zu erstellen?

Dies ist Broadcast Receiver Code in onCreate() Methode:

i = new IntentFilter();
i.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
receiver = new BroadcastReceiver(){
    public void onReceive(Context c, Intent i){
      WifiManager w = (WifiManager) c.getSystemService(Context.WIFI_SERVICE);
      List<ScanResult> l = w.getScanResults();
      for (ScanResult r : l) {
         // do smth with results
      }
      // log results
    }
};

Bei der Scan -Methode, die nach dem Drücken der Scan -Taste aufgerufen wird, habe ich:

timer = new Timer(true);
timer.schedule(new WifiTimerTask(), 0, scanningInterval);
registerReceiver(receiver, i );

wo WifiTimerTask ist

publlic class WifiTimerTask extends TimerTask{
    @Override
     public void run(){
         wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
         if (wifi.isWifiEnabled()) {
            wifi.startScan();
            List<ScanResult> sc = wifi.getScanResults(); 
            for (ScanResult r : l) {
               // do smth with results
            }
           // log results
          }
     }
}

Und der Punkt ist, dass das Scannen ohne durchgeführt werden kann registerReceiver(receiver,i). Jedoch nur wenn scanningInterval ist dann niedriger als 2s receiver ScanResults und startScan() sind nicht synchronisiert. Damit meine ich startScan() Die Ergebnisse ändern sich erst bis receiver wird neue Ergebnisse erzielen. In der Zwischenzeit bekomme ich in Logcat ERROR/wpa_supplicant(5837): Ongoing Scan action.... Es scheint jedoch, dass 2S das niedrigste Scanintervall ist. Bitte korrigieren Sie mich, wenn meine Annahmen falsch sind.

War es hilfreich?

Lösung

Wenn du anrufst startScan() Sie wissen nicht, wie lange der tatsächliche Scan dauert (im Allgemeinen kann er 1 ms oder 5 Stunden betragen). Sie können also nicht zuverlässig anrufen getScanResults() Wie Sie nicht wissen, wann der Scan abgeschlossen ist.

Das Ereignis zu verfolgen, wann getScanResults() Gibt die Ergebnisse der Update -Scan -Ergebnisse zurück, die Sie abonnieren müssen SCAN_RESULTS_AVAILABLE_ACTION.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top