Android判斷用戶的網(wǎng)絡(luò)類型實(shí)例講解(2/3/4G、wifi)
很多時(shí)候需要先判斷當(dāng)前用戶的網(wǎng)絡(luò),才會(huì)繼續(xù)之后的一些處理邏輯。但網(wǎng)絡(luò)類型獲取這一塊,我用我自己的的手機(jī)調(diào)試時(shí)遇到一些問題,這里記錄一下。

一加手機(jī)一代,移動(dòng)4G 網(wǎng)絡(luò),得到的subtype類型值為17,我查過Android 5.1的源碼,它最大的值也就為16。

我拿魅族的移動(dòng)4G測試的結(jié)果如下:

小米4,電信4G的測試結(jié)果如下:


魅族MX4,聯(lián)通3G


還測試了其它華為移動(dòng)3G/4G的情況,就我自己的手機(jī)一加返回的值有點(diǎn)奇怪,之后我查了一下它的參數(shù):

當(dāng)然,其它廠商:華為、小米、魅族與上面顯示的網(wǎng)絡(luò)類型基本上是一致的。都是3G:TD-SCDMA、WCDMA等
而目前測試的情況就是僅一加返回的值為17,這會(huì)導(dǎo)致正常的判斷出現(xiàn)問題,無法識(shí)別到底使用的是何種網(wǎng)絡(luò)。而我通過logcat的日志,卻很清晰的發(fā)現(xiàn)系統(tǒng)自己是能識(shí)別的

最后我根據(jù)網(wǎng)絡(luò)上提供的資料,加了一項(xiàng)比較特殊的判斷,演變成如下的代碼:
public static String GetNetworkType()
{
String strNetworkType = "";
NetworkInfo networkInfo = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE).getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected())
{
if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI)
{
strNetworkType = "WIFI";
}
else if (networkInfo.getType() == ConnectivityManager.TYPE_MOBILE)
{
String _strSubTypeName = networkInfo.getSubtypeName();
Log.e("cocos2d-x", "Network getSubtypeName : " + _strSubTypeName);
// TD-SCDMA networkType is 17
int networkType = networkInfo.getSubtype();
switch (networkType) {
case TelephonyManager.NETWORK_TYPE_GPRS:
case TelephonyManager.NETWORK_TYPE_EDGE:
case TelephonyManager.NETWORK_TYPE_CDMA:
case TelephonyManager.NETWORK_TYPE_1xRTT:
case TelephonyManager.NETWORK_TYPE_IDEN: //api<8 : replace by 11
strNetworkType = "2G";
break;
case TelephonyManager.NETWORK_TYPE_UMTS:
case TelephonyManager.NETWORK_TYPE_EVDO_0:
case TelephonyManager.NETWORK_TYPE_EVDO_A:
case TelephonyManager.NETWORK_TYPE_HSDPA:
case TelephonyManager.NETWORK_TYPE_HSUPA:
case TelephonyManager.NETWORK_TYPE_HSPA:
case TelephonyManager.NETWORK_TYPE_EVDO_B: //api<9 : replace by 14
case TelephonyManager.NETWORK_TYPE_EHRPD: //api<11 : replace by 12
case TelephonyManager.NETWORK_TYPE_HSPAP: //api<13 : replace by 15
strNetworkType = "3G";
break;
case TelephonyManager.NETWORK_TYPE_LTE: //api<11 : replace by 13
strNetworkType = "4G";
break;
default:
// http://baike.baidu.com/item/TD-SCDMA 中國移動(dòng) 聯(lián)通 電信 三種3G制式
if (_strSubTypeName.equalsIgnoreCase("TD-SCDMA") || _strSubTypeName.equalsIgnoreCase("WCDMA") || _strSubTypeName.equalsIgnoreCase("CDMA2000"))
{
strNetworkType = "3G";
}
else
{
strNetworkType = _strSubTypeName;
}
break;
}
Log.e("cocos2d-x", "Network getSubtype : " + Integer.valueOf(networkType).toString());
}
}
Log.e("cocos2d-x", "Network Type : " + strNetworkType);
return strNetworkType;
}
以上就是本文的全部內(nèi)容,希望對(duì)大家準(zhǔn)確判斷用戶的網(wǎng)絡(luò)類型有所幫助。
- Android獲取當(dāng)前手機(jī)網(wǎng)絡(luò)類型(2g、3g、4g、wifi)以及手機(jī)型號(hào)、版本號(hào)代碼
- Android判斷網(wǎng)絡(luò)類型的方法(2g,3g還是wifi)
- Android中判斷有無可用網(wǎng)絡(luò)的代碼(是否是3G或者WIFI網(wǎng)絡(luò))
- Android判斷是Wifi還是4G網(wǎng)絡(luò)代碼
- Android判斷用戶2G/3G/4G移動(dòng)數(shù)據(jù)網(wǎng)絡(luò)
- Android中判斷網(wǎng)絡(luò)連接是否可用及監(jiān)控網(wǎng)絡(luò)狀態(tài)
- android 檢查網(wǎng)絡(luò)連接狀態(tài)實(shí)現(xiàn)步驟
- Android中監(jiān)聽判斷網(wǎng)絡(luò)連接狀態(tài)的方法
- Android中監(jiān)聽系統(tǒng)網(wǎng)絡(luò)連接打開或者關(guān)閉的實(shí)現(xiàn)代碼
- android檢測網(wǎng)絡(luò)連接狀態(tài)示例講解
- android網(wǎng)絡(luò)編程之a(chǎn)ndroid連接網(wǎng)絡(luò)的簡單示例代碼
- Android中判斷網(wǎng)絡(luò)連接狀態(tài)的方法
- Android編程判斷是否連接網(wǎng)絡(luò)的方法【W(wǎng)iFi及3G判斷】
相關(guān)文章
Android實(shí)戰(zhàn)教程第四十三篇之上拉加載與下拉刷新
這篇文章主要為大家詳細(xì)介紹了Android實(shí)戰(zhàn)教程第四十三篇之上拉加載與下拉刷新,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
詳解Android數(shù)據(jù)存儲(chǔ)之SQLCipher數(shù)據(jù)庫加密
對(duì)于已經(jīng)ROOT的手機(jī)來說的沒有任何安全性可以,一旦被利用將會(huì)導(dǎo)致數(shù)據(jù)庫數(shù)據(jù)的泄漏,本篇文章主要介紹了Android數(shù)據(jù)存儲(chǔ)之SQLCipher數(shù)據(jù)庫加密,具有一定的參考價(jià)值,有需要的可以了解一下。2016-12-12
Android 實(shí)現(xiàn)電話來去自動(dòng)錄音的功能
本文主要介紹Android 電話自動(dòng)錄音功能的開發(fā),這里提供實(shí)現(xiàn)代碼和實(shí)現(xiàn)效果圖,有需要的小伙伴可以參考下2016-08-08
Android基于reclyview實(shí)現(xiàn)列表回彈動(dòng)畫效果
這篇文章主要為大家詳細(xì)介紹了Android基于reclyview實(shí)現(xiàn)列表回彈動(dòng)畫效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04
Android重力傳感器實(shí)現(xiàn)滾動(dòng)的彈球
所謂傳感器能夠探測如光、熱、溫度、重力、方向 等等的功能,本文給大家介紹Android傳感器應(yīng)用之重力傳感器實(shí)現(xiàn)滾動(dòng)的彈球,對(duì)android重力傳感器相關(guān)知識(shí)感興趣的朋友一起看看吧2015-12-12
基于android中的各種顏色在drawable.xml中的值詳解
本篇文章是對(duì)在android中的各種顏色在drawable.xml中的值進(jìn)行了詳細(xì)的介紹。需要的朋友參考下2013-05-05
android private libraries 中的包源代碼添加方法
這篇文章主要介紹了android private libraries 中的包源代碼添加方法,方法很簡單,看完本文即可學(xué)會(huì),需要的朋友可以參考下2015-05-05
Android onLoadFinished與onLoaderReset回調(diào)詳解及實(shí)例
這篇文章主要介紹了Android onLoadFinished與onLoaderReset回調(diào)詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-03-03

