Android之ConnectivityManager

转载出处:http://www.tuicool.com/articles/imEZJfU


在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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值