Android ConnectivityManager

本文介绍如何使用ConnectivityManager类监测Android设备的网络状态,包括获取当前活动网络信息、所有网络信息及监听网络状态变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

WifiManager: 管理和wifi相关的信息
TelephonyManager: 管理和手机、运营商等的相关信息
NetworkInfo类包含了对wifi和mobile两种网络模式连接的详细描述,通过getState()方法获取的State对象,代表着连接成功与否的状态。

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的具体用法。核心代码如下:
  添加权限:

<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>

```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("
");
    sb.append("Type:").append(networkInfo.getType()).append("
");
    sb.append("isAvailable:").append(networkInfo.isAvailable()).append("
");
    sb.append("isConnected:").append(networkInfo.isConnected()).append("
");
    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("
");
    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("
");
    }

    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("网络变化:无网络!");
            }
        }
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值