Question

J'ai créé scanner wi-fi. Il analyse en permanence les réseaux wi-fi disponibles. Mais ma question est pourquoi serait récepteur diffuser exactement est nécessaire si je peux réellement exécuter le balayage (Invoke startScan() avec minuterie toutes les x secondes) et de recevoir les mêmes résultats sans créer de récepteur de radiodiffusion?

est un code de réception de diffusion en mode de onCreate():

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

Dans la méthode de balayage, qui est appelée après balayage bouton est pressé je:

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

WifiTimerTask est

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
          }
     }
}

Et le point est que l'analyse peut être effectuée sans registerReceiver(receiver,i). Cependant que si scanningInterval est inférieure à 2 s, puis scanresults de receiver et startScan() ne sont pas synchronisés. Je veux dire les résultats de startScan() ne change pas jusqu'à ce que receiver va obtenir de nouveaux résultats. Pendant ce temps à LogCat je reçois ERROR/wpa_supplicant(5837): Ongoing Scan action.... On dirait 2s est l'intervalle de balayage le plus bas cependant. S'il vous plaît me corriger si mes suppositions sont erronées.

Était-ce utile?

La solution

Lorsque vous appelez startScan() vous ne savez pas combien de temps l'analyse réelle prendra (en général, il peut être de 1 ms ou 5 heures). Donc, vous ne pouvez pas appeler de manière fiable getScanResults() que vous ne savez pas quand l'analyse est terminée.

Pour suivre l'événement lorsque lorsque getScanResults() retournera les résultats d'analyse de mise à jour vous devez vous abonner à SCAN_RESULTS_AVAILABLE_ACTION.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top