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() {
    @Override
    public 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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM