一些需求需要擷取營運商和網絡類型,下面對營運商和網絡類型做分析。
先抛出一些廢話的定義:
GSM:全球移動通訊系統Global System of Mobile communication就是衆所周知的GSM,是目前應用最為廣泛的行動電話标準。
CDMA:碼分多址(CDMA)是在數字技術的分支--擴頻通信技術上發展起來的一種嶄新而成熟的無線通信技術。
可見,這兩者是 技術标準,和網絡類型及制式無關。
1.擷取話機類型 這個可以通過方法TelephonyManager#getPhoneType來獲得,下面是傳回類型。
常用話機類型就是GSM類型和CDMA類型,SIP是和VOIP相關的東西,平時不常遇到。
2.擷取營運商 TelephonyManager#getSimOperator用于擷取SIM卡營運商ID,比如移動是46002 TelephonyManager#getSimOperatorName方法擷取營運商名字,比如移動是CMCC TelephonyManager#getSimCountryIso擷取SIM卡國家,比如中國是cn TelephonyManager#getSimState擷取SIM卡狀态
3.擷取網絡類型 重點來了。 TelephonyManager#getNetworkType方法擷取網絡類型。
想要确切的顯示出手機目前的網絡,比如“聯通3G”,需要的就是這個。
在網上找了一些代碼,看見一些代碼在一些網絡類型後面标明:“移動2G”,我隻想說“呵呵”。
原因就是,從單一的網絡類型是無法判斷這點的。
回到正題,開始分析傳回值。
1)NETWORK_TYPE_GPRS GPRS是一種制式,相當于2.5G,它獨立于話機類型而存在,雖然移動是GSM話機,聯通是CDMA話機,但是他們都可以有這種制式,
拿移動2G舉例,我所在城市是EDGE網絡。但是在之前,移動和聯通可能有同時使用GPRS的時候,
同時也不排除部分地區移動仍然部署了GPRS的可能性,是以比較不贊同在代碼後面标“移動2G”的這位前輩。
2)NETWORK_TYPE_EDGE EDGE應該算是2.75G。據我所知,聯通好像沒有更新2G網絡到這個制式。而移動目前是在用這個。
3)NETWORK_TYPE_UMTS UMTS定義是一種3G行動電話技術,使用WCDMA作為底層标準,WCDMA向下相容GSM網絡。
目前中國也就隻有聯通了,這個确實可以唯一判斷營運商及其網絡類型。
4)NETWORK_TYPE_CDMA CDMA的定義是一種技術标準,有其2代、2.5代、3代技術。被認為是3代移動技術的首選,包含的标準有
WCDMA、CDMA2000、TD-SCDMA。這裡CDMA指代CDMA2代技術标準的制式,中國電信在用。
5)NETWORK_TYPE_1xRTT 在CDMA2000中,通常被認為是2.5G或2.75G,速率隻有其他3G的幾分之一,電信可能使用。
6)NETWORK_TYPE_EVDO_0、NETWORK_TYPE_EVDO_A、NETWORK_TYPE_EVDO_B 兩者都是CDMA2000标準中的版本,屬于3G,電信可能使用。
7)NETWORK_TYPE_HSDPA 一種通信協定,建立在WCDMA上,相當于3.5G,聯通可能使用。
8)NETWORK_TYPE_LTE 對應準4G,各個營運商都可能使用。
9)NETWORK_TYPE_GSM 這個值是隐藏的,值為16,暫時不知道什麼卡會出現。猜想應該是對應GSM标準的最早期制式,沒有驗證。
10)NETWORK_TYPE_TD_SCDMA 也是隐藏的,值為17,使用移動3G時是這個值。
結論:判斷哪個營運商那種網絡不應該隻根據NetworkType判斷。
營運商單獨擷取,而NetworkType可以進一步知道是2G還是3G。
其他中國不存在的制式就先不判斷了。
4.關于android版本相容 對于android版本低的裝置,不包含一些類型的定義,是以最好在自己的類中重新定義這些網絡類型變量