2012-02-24 85 views
5

我想設置監聽器來監聽無線狀態時,任何人都可以幫助我與我的代碼聽力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); 

//這裏是我使用的事件,我想要聽取wifi更改,並且上面的代碼全部在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(); 
      } 


    } 

} 

//誰能請幫助我,如果不建立一個監聽器將偵聽到的WiFi狀態,並檢查無線網絡連接或連接我想通過3G/4G

+0

看看在[此線索] [1]。 [1]:http://stackoverflow.com/questions/3767591/check-intent-internet-connection – 2012-02-24 16:39:08

回答

-2

當系統未連接WiFi時,android系統會要求切換至Data Traffic但存在問題。
如果在屏幕關閉時關閉WiFi,它將在WiFi和3G網絡之間不斷變化,並且如果您已選擇應用程序在後臺發送數據,則它將使用數據連接,如果您沒有無限制流量套餐。
另一個問題是,當你在一個沒有如此強大的WiFi信號的地區,它會不斷變化爲數據流量,並且你會遇到瀏覽或其他問題。
第三個問題是電池,因爲我聽說它使用WiFi連接比數據更好(電池方面),一個插件在屏幕關閉時不會關閉WiFi(即使我所以),因爲關閉和打開WiFi是最昂貴的(電池),永遠在線。所以請將其留給android系統。

5

我,使數據包流量也遇到了這個問題,這是我如何解決它。

在我的活動的onCreate(..)我沒有

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

,另外我創建的成員 'mWifiStateChangedReceiver' 這樣

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

    } 
}; 

正如你所看到的,當我得到WifiManager.WIFI_STATE_ENABLED我還測試網絡是否真正連接,因爲啓用的WiFi並不意味着它已連接。至少這是我的猜測,這就是爲什麼我要等到網絡真正連接。

+0

慣於while循環使在啓用WIFI的面應用hanf但不連接的情況。你應該給它增加一個時間,就像10個循環之後說的那樣。 – 2013-05-15 12:12:21

+0

CountDownLatch會給你一個很好的方式來等待一個超時事件。 – 2014-03-27 04:41:00

+0

抱歉@Chris,...但您在註冊偵聽器時放置了新的IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION))。但在Broadcastlistener內部,您放置了不同的值:intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,WifiManager.WIFI_STATE_UNKNOWN);那是對的嗎? – gumuruh 2014-07-26 10:29:55

1

如果你要聽信號強度還可以聽的:

WifiManager.RSSI_CHANGED_ACTION