Android之ConnectivityManager
在android平臺中ConnectivityManager主要負責查詢網絡連接狀態以及在連接狀態有變化的時候發出通知。其主要的功能職責如下:
1、? 監視網絡狀態,包括(Wi-Fi、GPRS、UMTS等)
2、? 當網絡狀態發生變化時發送廣播通知
3、? 當網絡連接失敗后會嘗試連接其他網絡
4、? 為App提供API,用于獲取網絡狀態信息等
該類中提供了一些常量,比如廣播Action、網絡類型等等,具體如下:
公共的方法有:
在上述方法中,常用的有getActivieNetworkInfo、getAllNetworkInfo、getNetworkInfo(int networkType)等,這些方法返回NetworkInfo,該類用于描述網絡的狀態(mobile和wifi)。
在NetworkInfo中定義了兩個內部類,用于枚舉網絡的狀態,兩個內部類分別為NetworkInfo.DetailedState,精確的網絡狀態;NetworkInfo.State,粗略的網絡狀態。
NetworkInfo.DetailedState的枚舉值:
NetworkInfo.State的枚舉值:
二者之間的對應關系:
在NetworkInfo中除了兩個內部類外,還提供了一些方法,如
1、? getDetailedState():返回當前精確的網絡狀態。
2、? getState():返回當前粗略的網絡狀態。
3、? getType():返回當前的網絡類型(mobile或者wi-fi)
4、? getTypeName():返回當前網絡類型的名稱。如“WIFI”或者“MOBILE”
5、? isAvailable():判斷網絡是否有效可用。
6、? isConnected():判斷網絡是否已連接。
下面,我們通過一個案例來展示ConnectityManager的具體用法。核心代碼如下:
public void getNetworkState(View v){//獲取ConnectivityManager connectivityManager=(ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);NetworkInfo networkInfo=connectivityManager.getActiveNetworkInfo();StringBuilder sb = new StringBuilder();sb.append("TypeName:").append(networkInfo.getTypeName()).append("\n");sb.append("Type:").append(networkInfo.getType()).append("\n");sb.append("isAvailable:").append(networkInfo.isAvailable()).append("\n");sb.append("isConnected:").append(networkInfo.isConnected()).append("\n");NetworkInfo.DetailedState state= networkInfo.getDetailedState();String detailedState="";if(state== NetworkInfo.DetailedState.AUTHENTICATING){detailedState="AUTHENTICATING";}else if(state== NetworkInfo.DetailedState.BLOCKED){detailedState="BLOCKED";}else if(state== NetworkInfo.DetailedState.CONNECTED){detailedState="CONNECTED";}else if(state== NetworkInfo.DetailedState.CONNECTING){detailedState="CONNECTING";}else if(state== NetworkInfo.DetailedState.DISCONNECTED){detailedState="DISCONNECTED";}else if(state== NetworkInfo.DetailedState.DISCONNECTING){detailedState="DISCONNECTING";}else if(state== NetworkInfo.DetailedState.FAILED){detailedState="FAILED";}else if(state== NetworkInfo.DetailedState.IDLE){detailedState="IDLE";}else if(state== NetworkInfo.DetailedState.SCANNING){detailedState="SCANNING";}else if(state== NetworkInfo.DetailedState.OBTAINING_IPADDR){detailedState="OBTAINING_IPADDR";}else if(state== NetworkInfo.DetailedState.SUSPENDED){detailedState="SUSPENDED";}sb.append("DetailedState:").append(detailedState).append("\n");showState.setText(sb.toString()); }/*** 獲取搜有網絡* @param v*/ public void getNetwork(View v){ConnectivityManager connectivityManager=(ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);StringBuilder stringBuilder = new StringBuilder();NetworkInfo[] networkInfos= connectivityManager.getAllNetworkInfo();for(NetworkInfo info:networkInfos){stringBuilder.append("Name:").append(info.getTypeName()).append(";isAvailable:").append(info.isAvailable()).append("\n");}showNetwork.setText(stringBuilder.toString()); }private BroadcastReceiver receiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {if(intent.getAction().equals("android.net.conn.CONNECTIVITY_CHANGE")){ConnectivityManager connectivityManager=(ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);NetworkInfo info= connectivityManager.getActiveNetworkInfo();if(info!=null){if(info.getState()== NetworkInfo.State.CONNECTED){showChange.setText("網絡變化:網絡已連接!");}else{showChange.setText("網絡變化:網絡已斷開!");}}else{showChange.setText("網絡變化:無網絡!");}}} };案例效果如下:
注意,以上代碼需要使用的如下權限:
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>?
轉載于:https://www.cnblogs.com/android-blogs/p/4962076.html
總結
以上是生活随笔為你收集整理的Android之ConnectivityManager的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jQuery-1.9.1源码分析系列(五
- 下一篇: Android Bitmap Ou