Android Network --判斷網路狀態(網路的串連,改變,和判斷2G/3G/4G)

來源:互聯網
上載者:User

Android Network --判斷網路狀態(網路的串連,改變,和判斷2G/3G/4G)



現在app大多都需要從網路上獲得資料。所以訪問網路是在所難免。但是再訪問網路之前,我們應該先做一下網路的狀態判斷。其實在訪問網路之前我們要做一些狀態判斷,對應一些狀態判斷來做處理,並不是直接使用Http訪問網路即可。很多人在開發就經常把網路這塊直接跳過,直接存取網路,可以一斷網,各種體驗效果不好,不是說app沒法用,只是體驗效果差。還有,就是我們可能為使用者考慮,因為現在一般連網是wifi和手機流量,都知道後者收費是比較高的。假如我們的app載入的圖片或者有大的資料下載操作,可是使用者的本意是要是在流量下的話就不要操作這些很費流量的的操作,這樣就必須要我們做一些連網狀態的判斷。網路是否串連良好,串連的wifi還是流量,斷網或者網路改變了的時候怎麼做,這都是一些細節,但是要注意處理。

 

我們在做訪問的時候都得進行判斷是否連網。判斷連網也比較簡單,就用到了兩個類。ConnectivityManager和NetworkInfo。

 

只要執行下面的代碼就可以了。

ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo networkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);boolean isWifiConn = networkInfo.isConnected();networkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);boolean isMobileConn = networkInfo.isConnected();

 

只要有一個串連就是有網,NetworkInfo就是網路的資訊。還有一種更簡便的判斷是否連網的方法。

ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();

 

在一個就是監聽網路變化,就是設定一個廣播。

註冊廣播,監聽ConnectivityManager.CONNECTIVITY_ACTION這個action

IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);receiver = new NetworkReceiver();context.registerReceiver(receiver, filter);

 

再實現一個廣播類就可以了。這樣網路一變化,就會受到廣播,然後執行對應操作了。

public class NetworkReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Log.i("TAG", "intent============>>>>" + intent.toString());}}


下面就是來說一下判斷行動電話通訊的類型了,2G,3G,4G

關於網路類型,在得到networkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);這個後,確定是行動電話通訊後,通過networkInfo.getSubtype()會得到網路的類型,用networkInfo.getSubtypeName()會得到網路的名字。

我們通過這個networkInfo.getSubtype()得到的類型來判斷當前是什麼網路。

其實,Android的Api中已經定義了各種網路狀態,不是在ConnectivityManager裡面定義的,而是在TelephonyManager裡面的定義的。通過不同的api版本的修改,目前增加到了14個狀態值:

下面是通過自己查資料,和看別人查資料實驗得來的。整理如下:

 

--------------------Added in API level 1---------------------public static final int NETWORK_TYPE_UNKNOWNNetwork type is unknownConstant Value: 0 (0x00000000)(不知道網路類型)public static final int NETWORK_TYPE_GPRSCurrent network is GPRSConstant Value: 1 (0x00000001)(2.5G)移動和聯通public static final int NETWORK_TYPE_EDGECurrent network is EDGEConstant Value: 2 (0x00000002)(2.75G)2.5G到3G的過渡    移動和聯通public static final int NETWORK_TYPE_UMTSCurrent network is UMTSConstant Value: 3 (0x00000003)(3G)聯通-----------------Added in API level 4---------------------public static final int NETWORK_TYPE_CDMACurrent network is CDMA: Either IS95A or IS95BConstant Value: 4 (0x00000004)(2G 電信)public static final int NETWORK_TYPE_EVDO_0Current network is EVDO revision 0Constant Value: 5 (0x00000005)( 3G )電信public static final int NETWORK_TYPE_EVDO_ACurrent network is EVDO revision AConstant Value: 6 (0x00000006)(3.5G) 屬於3G過渡public static final int NETWORK_TYPE_1xRTTCurrent network is 1xRTTConstant Value: 7 (0x00000007)( 2G )---------------------Added in API level 5--------------------public static final int NETWORK_TYPE_HSDPACurrent network is HSDPAConstant Value: 8 (0x00000008)(3.5G )public static final int NETWORK_TYPE_HSUPACurrent network is HSUPAConstant Value: 9 (0x00000009)( 3.5G )public static final int NETWORK_TYPE_HSPACurrent network is HSPAConstant Value: 10 (0x0000000a)( 3G )聯通--------------------------Added in API level 8-------------------------public static final int NETWORK_TYPE_IDENCurrent network is iDenConstant Value: 11 (0x0000000b)(2G )--------------------------Added in API level 9-------------------------public static final int NETWORK_TYPE_EVDO_BCurrent network is EVDO revision BConstant Value: 12 (0x0000000c)3G-3.5G--------------------------Added in API level 11------------------------public static final int NETWORK_TYPE_LTECurrent network is LTEConstant Value: 13 (0x0000000d)(4G)public static final int NETWORK_TYPE_EHRPDCurrent network is eHRPDConstant Value: 14 (0x0000000e)3G(3G到4G的升級產物)--------------------------Added in API level 13---------------------------public static final int NETWORK_TYPE_HSPAPCurrent network is HSPA+Constant Value: 15 (0x0000000f)( 3G )

 

所以我們可以networkInfo.getSubtype()得到值和上面的進行對應,就知道目前是幾G網路了。由於手裡的手機卡有限,所以有些不全,歡迎大家補充,共用。

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.