zoukankan      html  css  js  c++  java
  • 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("
    ");
        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("网络变化:无网络!");
                }
            }
        }
    };
    复制代码

      案例效果如下:

    注意,以上代码需要使用的如下权限:

    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
  • 相关阅读:
    CSS+js弹出居中的背景半透明div层
    多服务器Remoting
    【Matlab图像处理】学习笔记:二值图片
    [转]各种颜色相互转换算法的C语言源代码
    [转]Xilinx:ERROR:Xst:2035
    modelsim仿真xilinx IP DCM
    [转]MATLAB out of memory
    [转]解决Xilinx Platform Studio无法打开 设置 环境变量
    【Matlab图像处理】学习笔记:读取16进制RGB文档转为彩色图片
    【Matlab图像处理】学习笔记:提取图片的R,G,B分量
  • 原文地址:https://www.cnblogs.com/android-blogs/p/4962076.html
Copyright © 2011-2022 走看看