2012-02-24 10 views
5

voglio impostare ascoltatore per l'ascolto su Stato wireless, qualcuno mi può aiutare con il mio codiceAscolto Stato WIFI

import android.telephony.PhoneStateListener; 
import android.telephony.TelephonyManager; 

...

TelephonyManager wTelephonyManager; 

...

 wTelephonyManager=(TelephonyManager)getSystemService(Context.WIFI_SERVICE); 
    wTelephonyManager.listen(new PhoneL(),PhoneStateListener.LISTEN_DATA_CONNECTION_STATE); 
    connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); 

// ecco l'evento che uso che voglio ascoltare per la modifica del wifi, e il codice sopra riportato è tutto in onCreate {}

class PhoneL extends PhoneStateListener 

{ 






    public void onWifiStateChanged(int state, String nesto) 
    { 
     mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
      //mWifi.isConnectedOrConnecting() 
      if(mWifi.isConnectedOrConnecting()) 
      { 
       Toast.makeText(WifiActivity.this,"Ima WIFI",Toast.LENGTH_LONG).show();  
      } 
      else 
      { 
       Toast.makeText(WifiActivity.this,"! NEMA WIFI",Toast.LENGTH_LONG).show(); 
      } 


    } 

} 

// Qualcuno può per favore mi aiuti la creazione di un ascoltatore che ascolterà allo stato wifi e controllare se wifi è collegato o il collegamento se non è che voglio per consentire il traffico di pacchetti di dati tramite 3G/4G

+0

Dai un'occhiata al [questa discussione] [1]. [1]: http://stackoverflow.com/questions/3767591/check-intent-internet-connection –

risposta

-2

Il sistema Android chiede di passare a Data Traffic quando WiFi non è collegato ma c'è un problema.
Se si spegne il WiFi quando lo schermo è spento, cambierà continuamente tra la rete WiFi e 3G e se hai selezionato le app per inviare dati in background, userà la connessione dati che è più costosa se non hai illimitato piano dati.
Un altro problema è che quando ci si trova in un'area con segnale WiFi non molto potente, esso cambierà costantemente in Data Traffic e si avranno problemi di navigazione o altro.
Il terzo problema è la batteria come da quello che ho sentito è meglio (batteria saggio) per utilizzare la connessione WiFi rispetto ai dati, con un componente aggiuntivo non disattivare WiFi quando lo schermo è spento. (Anche, lo faccio così) perché spegnerlo e accenderlo è il più costoso (batteria) che sia sempre attivo. quindi lasciatelo al sistema Android.

5

io ho incontrato anche questo problema, ecco come l'ho risolto.

Nella mia attività onCreate (..) ho fatto

this.registerReceiver(mWifiStateChangedReceiver,new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION)); 

e inoltre ho creato il membro 'mWifiStateChangedReceiver' in questo modo

private BroadcastReceiver mWifiStateChangedReceiver = new BroadcastReceiver() 
{ 

    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     // TODO Auto-generated method stub 

     int extraWifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN); 

     switch (extraWifiState) 
     { 
     case WifiManager.WIFI_STATE_DISABLED: 
     case WifiManager.WIFI_STATE_DISABLING: 
      enableUI(false); 
      break; 
     case WifiManager.WIFI_STATE_ENABLED: 
      ConnectivityManager conMan = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
      while(conMan.getActiveNetworkInfo() == null || conMan.getActiveNetworkInfo().getState() != NetworkInfo.State.CONNECTED) 
      { 
       try 
       { 
        Thread.sleep(500); 
       } catch (InterruptedException e) 
       { 
        e.printStackTrace(); 
       } 
      } 
      update(); 
      enableUI(true); 
      break; 
     case WifiManager.WIFI_STATE_ENABLING: 
      break; 
     case WifiManager.WIFI_STATE_UNKNOWN: 
      break; 
     } 

    } 
}; 

Come si può vedere, quando mi WifiManager.WIFI_STATE_ENABLED ho inoltre prova se la rete è realmente connessa, perché un WiFi abilitato non significa che sia connesso. Almeno questa era la mia ipotesi, ecco perché sto aspettando che la rete sia realmente connessa.

+0

Wont il ciclo while rendere il hanf applicazione a fronte di WIFI abilitato, ma gli scenari non collegati. Dovresti aggiungere un timeout, come ad esempio dopo 10 loop. –

+0

Un CountDownLatch ti darebbe un bel modo di aspettare un evento con un timeout. –

+0

mi dispiace @Chris, ... ma metti questo nuovo IntentFilter (WifiManager.WIFI_STATE_CHANGED_ACTION)) quando registri il listener. Ma all'interno di Broadcastlistener hai messo un valore diverso: intent.getIntExtra (WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN); è corretto? – gumuruh

1

Se si desidera ascoltare la potenza del segnale è anche possibile ascoltare in:

WifiManager.RSSI_CHANGED_ACTION