2012-02-24 16 views
5

Chcę ustawić słuchacza słuchać o stanie bezprzewodowej, może ktoś mi pomóc z moim kodemSłuchanie stan 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); 

// tutaj jest zdarzenie, którego używam, że chcę słuchać dla zmiany wifi, a powyższy kod jest włączony 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(); 
      } 


    } 

} 

// Czy ktoś może mi pomóc tworzenie słuchacza, który będzie wysłuchać państwa wifi i sprawdź czy wifi jest podłączony lub podłączania jeśli nie chcę, aby umożliwić ruch pakietów danych przez 3G/4G

+0

przyjrzeć się z [tego wątku] [1]. [1]: http://stackoverflow.com/questions/3767591/check-intent-internet-connection –

Odpowiedz

-2

System Android prosi o przełączenie na Data Traffic, gdy WiFi nie jest podłączony, ale wystąpił problem.
Jeśli wyłączysz Wi-Fi, gdy ekran jest wyłączony, będzie on ciągle zmieniać się między siecią Wi-Fi i siecią 3G, a jeśli wybrałeś aplikacje do wysyłania danych w tle, skorzysta z połączenia danych, które jest droższe, jeśli nie masz nieograniczonego połączenia plan transmisji danych.
Inną kwestią jest sytuacja, gdy jesteś w obszarze o niezbyt silnym sygnale WiFi, który stale zmienia się na ruch danych i będziesz mieć problemy z przeglądaniem lub z czymkolwiek.
Trzecie wydanie to bateria z tego, co słyszałem, że jest lepsza (z baterii) do korzystania z połączenia Wi-Fi niż danych, z jednym dodatkiem nie wyłącza Wi-Fi, gdy ekran jest wyłączony (nawet, ja więc), ponieważ wyłączenie go i korzystanie z WiFi jest najbardziej kosztowne (bateria), która ma być zawsze włączona. więc zostaw to systemowi android.

5

I natknąłem się na ten problem, oto jak go rozwiązałem.

W mojej działalności onCreate (..) I zrobił

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

i dodatkowo stworzyłem człon 'mWifiStateChangedReceiver' tędy

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

    } 
}; 

Jak widać, kiedy się WifiManager.WIFI_STATE_ENABLED ja dodatkowo sprawdź, czy sieć jest naprawdę podłączona, ponieważ włączone WiFi nie oznacza, że ​​jest połączone. Przynajmniej to było moje przypuszczenie, dlatego czekam, aż sieć będzie naprawdę połączona.

+0

Przyzwyczajenie pętli while aby aplikacja Hanf w obliczu WIFI włączone, ale nie związane scenariuszy. Powinieneś dodać do niego czas, np. Powiedz po 10 pętlach. –

+0

CountDownLatch dałoby ci dobry sposób na poczekanie na wydarzenie z limitem czasu. –

+0

Przepraszam @Chris, ... ale wstawiłeś ten nowy IntentFilter (WifiManager.WIFI_STATE_CHANGED_ACTION)) podczas rejestrowania odbiornika. Ale wewnątrz Broadcastlistener można umieścić inną wartość: intent.getIntExtra (WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN); czy to jest poprawne? – gumuruh

1

Jeśli chcesz słuchać siłę sygnału można także posłuchać na stronie:

WifiManager.RSSI_CHANGED_ACTION