2010-06-05 18 views
5

Sto cercando di cercare reti wireless e ho trovato questa fonte utile sulla rete. Purtroppo non funziona e non ho idea del perché. Il mio problema è che non posso aspettare 10 minuti per il risultato - ne ho bisogno in pochi secondi e ho pensato di impostare la variabile booleana in attesa di false non appena ottengo un risultato .... beh, funziona per sempre .. sembra che nulla è ricevuto. Qualche idea ? Grazie.Android Scan per reti Wifi

// -- Sample WiFi implementation - http://groups.google.com/group/android-developers/browse_thread/thread/f722d5f90cfae69 
     IntentFilter i = new IntentFilter(); 
     i.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION); 
      registerReceiver(new BroadcastReceiver(){ 
       @Override 
       public void onReceive(Context c, Intent i){ 
        // Code to execute when SCAN_RESULTS_AVAILABLE_ACTION event occurs 
        mWifiManager = (WifiManager) c.getSystemService(Context.WIFI_SERVICE); 
        wireless = mWifiManager.getScanResults(); // Returns a <list> of scanResults 
        waiting = false; 
       } 
      } 
     ,i); 
     // -- End Wifi Sample 


     mWifiManager.startScan(); 


     while (waiting) { 
      try { 
       Thread.sleep(200); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      Log.d("PROJECT1","Wifi WAITING"); 
     } 
+0

beh, è ​​bello provare. L'hai provato su un dispositivo o emulatore reale @Nils? – gumuruh

risposta

3

Beh non so nulla di accelerare il processo, potrebbe essere solo che ci vuole un po 'per trovare i segnali WiFi (che, o il vostro wifi non è acceso ... che è qualcosa che la tua il programma dovrebbe controllare prima che inizi). Tuttavia, una cosa che puoi fare per migliorare il tuo flusso di lavoro sarebbe fare tutto questo in una diversa attività usando startActivityForResult(). In questo modo la tua attività "principale" sarà in grado di agire su quei dati dopo che è stata eseguita e non si dovrà mangiare la CPU su un ciclo while.

public void onActivityResult(....){ 
    switch(retCode){ 
    case SCAN_ACTIVITY:{ 
     //do stuff 
     } 
    } 
} 
4

Dove stai inserendo questo codice? Nel onCreate di un'attività?

Il problema è che si sta registrando un callback, che andranno chiamato quando si ricevono i risultati di scansione, che according to the Android API docs è fatto in un thread separato, in modo che il ciclo busy-attesa sta ottenendo nulla in questa circostanza, tranne inutilmente arrestare la vostra attività, e se è durante il onCreate significa che non esce mai il metodo.

+0

Sì, era nel metodo onCreate ... L'ho spostato ora su OnStart, ma non funziona ancora ... sembra che la funzione onReceive non venga mai chiamata ... c'è forse un errore? Corro bene, ma non esce mai da questo loop ... – Nils

+2

non vuoi metterlo in nessuno dei metodi onCreate, onRestart, onStart perché tutti pongono lo stesso problema: non uscirai mai da quei metodi, quindi il callback non sarà mai accadere. – mtmurdock

3

Ok, ho trovato l'errore.

Era il ciclo. Sembra che la funzione onReceive non venga mai chiamata poiché l'attività esegue solo questo ciclo. Sembra che il programma debba raggiungere la fine della funzione per eseguire altre funzioni come OnReceive ...

Grazie per l'aiuto in qualsiasi modo. Mi ha aiutato a migliorare un po ':)

10

è necessario implementare un BroadcastReceiver di ascolto per i risultati della scansione tornati da WifiManager.startScan(). onReceive() permette di accedere direttamente alle resuls scansione. ci vogliono circa 1 secondo per il completamento della scansione e innescare onReceive() ...

+1

Questa è la risposta giusta. È il modo Android e ti consente di ottenere quasi immediatamente dati nuovi. – Eagle

0

si dovrebbe scrivere in BroadcastReceiver come questo:

  1. Registrati è
  2. Poi StartScan e fare come questo

    if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(action)) { 
    
    super.onReceive(context, intent);   
    //Scan is ok, just need few seconds! 
    } 
    
Problemi correlati