Android通過ConnectivityManager檢查網路狀態_Android

來源:互聯網
上載者:User

在開發android應用時,涉及到要進行網路訪問,時常需要進行網路狀態的檢查,以提供給使用者必要的提醒。一般可以通過ConnectivityManager來完成該工作。
ConnectivityManager有四個主要任務:
1、監聽行動電話通訊狀態(包括GPRS,WIFI, UMTS等)
2、手機狀態發生改變時,發送廣播
3、當一個網路連接失敗時進行故障切換
4、為應用程式提供可以擷取可用網路的高精度和粗糙的狀態當我們要在程式中監聽網路狀態時,只要一下幾個步驟即可:

1、定義一個Receiver重載其中的onReceive函數,在其中完成所需要的功能,如根據WIFI和GPRS是否斷開來改變空間的外觀

connectionReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { ConnectivityManager connectMgr = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); NetworkInfo mobNetInfo = connectMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); NetworkInfo wifiNetInfo = connectMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); if (!mobNetInfo.isConnected() && !wifiNetInfo.isConnected()) {  Log.i(TAG, "unconnect");  // unconnect network  }else { // connect network  } } }; 

2、在適當的地方註冊Receiver,可以在程式中註冊,在onCreate中調用如下函數即可:

IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); registerReceiver(connectionReceiver, intentFilter); 

3、在適當時取消註冊Receiver,可以在程式中取消,在onDestroye中調用如下函數即可:

if (connectionReceiver != null) { unregisterReceiver(connectionReceiver); } 

Ps:網上還有很多關於使用TelephonyManager 的方法的,方法如下(但是我試了好幾次都有問題,如每次第一次進入一個Activity時會自動收到網路斷開的訊號,每次網路狀態改變時收到多次回調且狀態不正確。不知道有什麼要注意的地方,求指點!)

final TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); mTelephonyMgr.listen(new PhoneStateListener(){@Overridepublic void onDataConnectionStateChanged(int state) {switch(state){case TelephonyManager.DATA_DISCONNECTED://網路斷開break;case TelephonyManager.DATA_CONNECTING://網路正在串連break;case TelephonyManager.DATA_CONNECTED://網路連接上break;}}}, PhoneStateListener.LISTEN_DATA_CONNECTION_STATE); 

至於第二種方法,本人並沒有去嘗試過。第一種方式還是比較好用,如果要程式隱藏在背景話,建議開個service,將BroadcastReceiver註冊在service,但不要忘了取消註冊。
在測試中遇到過這樣的狀況,將一個當前串連wifi的路由裝置關閉,但是程式並沒有捕捉到unconnect network,可能是因為手機裝置立刻串連另一個路由裝置了。

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援雲棲社區。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.