編輯:關於Android編程
很多時候需要先判斷當前用戶的網絡,才會繼續之後的一些處理邏輯。但網絡類型獲取這一塊,我用我自己的的手機調試時遇到一些問題,這裡記錄一下。
一加手機一代,移動4G 網絡,得到的subtype類型值為17,我查過Android 5.1的源碼,它最大的值也就為16。
我拿魅族的移動4G測試的結果如下:
小米4,電信4G的測試結果如下:
魅族MX4,聯通3G
還測試了其它華為移動3G/4G的情況,就我自己的手機一加返回的值有點奇怪,之後我查了一下它的參數:
當然,其它廠商:華為、小米、魅族與上面顯示的網絡類型基本上是一致的。都是3G:TD-SCDMA、WCDMA等
而目前測試的情況就是僅一加返回的值為17,這會導致正常的判斷出現問題,無法識別到底使用的是何種網絡。而我通過logcat的日志,卻很清晰的發現系統自己是能識別的
最後我根據網絡上提供的資料,加了一項比較特殊的判斷,演變成如下的代碼:
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 中國移動 聯通 電信 三種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; }
以上就是本文的全部內容,希望對大家准確判斷用戶的網絡類型有所幫助。
對於Android事件分發機制,我們在開發的過程中,肯定曾經遇到在最外層添加了ScrollView之後ListView無法正常滑動、我們的圖片輪播在左右滑動圖片為什麼感覺
下載動畫經常出現在下載需求多的app中,比如游戲下載平台,應用市場……先看看效果圖:實現private void startAnim() { //以bitmap創建
本文實例講述了Android中Service用法。分享給大家供大家參考,具體如下:關於Service的講解網上已經很多了,這裡是關於自己通過寫代碼Service的一點體會
Android是一種基於Linux的自由及開放源代碼的操作系統,主要使用於移動設備,如智能手機和平板電腦,由Google公司和開放手機聯盟領導及開發,從語言上來看,And