Android常見問題總結(七)
31.如何判斷當前網路型別
想要判斷Android裝置當前的網路型別,我們可以使用ConnectivityManager類通過ConnectivityManager#getActiveNetworkInfo我們可以獲取NetworkInfo類,它包含了當前網路相關的資訊
我們可以通過NetworkInfo#isAvailable來判斷是否連上了網路
通過NetworkInfo#getType來判斷當前網路是否wifi型別
至於行動網路的型別,我們可以通過NetworkInfo#getSubtype獲取網路的型別,然後通過TelephonyManager#getNetworkClass來判斷當前的網路究竟是那種具體型別(不過這個方法是hide,估計是官方覺得不準確就不公開了,我們可以開啟原始碼把該方法拷貝出來使用)
具體判斷網路型別的程式碼如下:
public static final String NETWORK_WIFI = "Wifi"; public static final String NETWORK_2G = "2G"; public static final String NETWORK_3G = "3G"; public static final String NETWORK_4G = "4G"; public static final String NETWORK_OTHER = "Other"; public static final String NETWORK_NONE = "None"; /** * 獲取當前網路型別 * @param context 上下文 * @return 網路型別 * * @see #NETWORK_NONE * @see #NETWORK_WIFI * @see #NETWORK_2G * @see #NETWORK_3G * @see #NETWORK_4G * @see #NETWORK_OTHER */ public static String getNetworkDetailType(Context context) { if (context == null) { return NETWORK_NONE; } try { ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo info = manager.getActiveNetworkInfo(); // 判斷是否無網路 if (info == null || !info.isAvailable()) { return NETWORK_NONE; } // 是否wifi if (info.getType() == ConnectivityManager.TYPE_WIFI) { return NETWORK_WIFI; } /** * 判斷行動網路型別,可見 * @see TelephonyManager#getNetworkClass */ switch (info.getSubtype()) { 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: return NETWORK_2G; 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: case TelephonyManager.NETWORK_TYPE_EHRPD: case TelephonyManager.NETWORK_TYPE_HSPAP: return NETWORK_3G; case TelephonyManager.NETWORK_TYPE_LTE: return NETWORK_4G; default: return NETWORK_OTHER; } } catch (Exception e) { L.exception(e); } return NETWORK_NONE; }
32.關於Android resources資源的問題
33.adb shell dumpsys 指令使用
該命令用於打印出當前系統資訊,預設打印出裝置中所有service的資訊,可以在命令後面加指定的service name.有兩種方法可以檢視service list:
- adb shell dumpsys:輸出資訊的開始部分就是所有執行的service
- adb shell service list