获取网络信息、开关网络ConnectivityManager,判断网络是否可用,判断网络连接状态

目录

一、获取网络信息

1.权限

2.获取网络信息

(1) ConnectivityManager方法:

(2) NetworkInfo方法:

3.网络连接状态工具类

二、开关网络

1.权限

2.开关网络功能 

(1) WiFi网络

(2) 移动数据网络


Android中使用ConnectivityManager(连接管理器)对网络连接进行管理;该管理器管理全部网络连接,包括WiFi、移动数据连接等,如仅需管理WiFi可使用WiFiManager。

ConnectivityManager(连接管理器),可获取网络连接状态,获取网络信息。

一、获取网络信息

可使用ConnectivityManager的getActiveNetworkInfo方法获取网络信息(NetworkInfo)实例,NetworkInfo实例中包含了网络的各种信息,根据需要按方法获取即可。

1.权限

<!--联网权限,无需动态申请-->
<uses-permission android:name="android.permission.INTERNET"/>
<!--查看网络状态,无需动态申请-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

2.获取网络信息

(1) ConnectivityManager方法:

  • getActiveNetworkInfo():获取当前网络连接的网络信息(NetworkInfo)实例,如当前无网络连接则返回null

(2) NetworkInfo方法:

  • isConnected():判断网络是否已连接。返回boolean。
  • isAvaible():判断网络是否可用(需要先判断是否已连接网络)。返回boolean。
  • getState():获取网络状态。取值为Network.State.CONNECTING,正在连接;CONNECTED,已连接;SUSPENDED,已挂起;DISCONNECTING,正在断开;DISCONNECTED,已断开;UNKNOWN,未知。
  • getType():获取网络类型。取值为ConnectivityManager.TYPE_WIFI,wifi;TYPE_MOBILE,数据连接;TYPE_WIMAX,wimax;TYPE_ETHERENT,以太网;TYPE_BLUETOOTH,蓝牙;TYPE_VPN,vpn。
  • getSubtype():获取网络子类型(移动数据子类型)。当网络类型为数据连接时子类型为2G/3G/4G的细分类型,如CDMA、EVDO、HSDPA、LTE等。取值为TelephonyManager.NETWORK_TYPE_GPRS,2G;EDGE,2G;1xRTT,2G;CDMA,2G;IDEN,2G;GSM,2G;UMTS,3G;EVDO_0,3G;EVDO_A,3G;EVDO_B,3G;EHRPD,3G;HSPAP,3G;HSDPA,3G;HSUPA,3G;TD_SCDAM,3G;LTE,4G;IWLAN,4G;NR,5G
/**
  * 判断网络是否可用-简易版
  * @return true=可用 false=不可用
  */
private boolean networkCanUse(Context context){
    ConnectivityManager connectivityManager= (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo=connectivityManager.getActiveNetworkInfo();
    if(networkInfo==null||!networkInfo.isConnected()||!networkInfo.isAvailable()){
        return false;
    }
    return true;
}
//获取连接管理器
ConnectivityManager connectivityManager= (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);

//获取网络信息
NetworkInfo networkInfo=connectivityManager.getActiveNetworkInfo();
//判断是否有网络连接
if(networkInfo==null){
    //无网络
    textView.setText("无网络");
    return;
}

//获取网络状态
NetworkInfo.State networkState=networkInfo.getState();
if(networkState!= NetworkInfo.State.CONNECTED){
    //未连接
    textView.setText("网络未连接");
    return;
}

//获取网络是否可用
if(!networkInfo.isAvaible()){
    //不可用
    textView.setText("网络不可用");
    return;
}

//获取网络类型
int networkType=networkInfo.getType();
if(networkType==ConnectivityManager.TYPE_WIFI){
    //WiFi
    textView.setText("连接WiFi");
}
else if(networkType==ConnectivityManager.TYPE_MOBILE){
    //移动数据
    textView.setText("连接移动数据");
    //获取网络子类型
    int subtype=networkInfo.getSubtype();
    if(subtype==TelephonyManager.NETWORK_TYPE_LTE|subtype==TelephonyManager.NETWORK_TYPE_IWLAN){
        textView.setText("连接4G");
    }
}else {
    //其他
    textView.setText("连接其他网络");
}

3.网络连接状态工具类

根据ConnectivityManager(连接管理器)编写了如下工具类,其中方法用于获取当前网络状况。

class NetworkUtils{
    /**
     * 用于确认当前网络信息的方法
     * @return -1=无网络连接 0=网络断连 1=WiFi连接 2=4G连接 3=5G连接 4=其他移动数据连接 5=其他网络连接
     */
    private int checkNowNetwork(Context context){
        //获取连接管理器
        ConnectivityManager connectivityManager= (ConnectivityManager) context.getSystemService(CONNECTIVITY_SERVICE);
        //获取网络信息
        NetworkInfo networkInfo=connectivityManager.getActiveNetworkInfo();
        if(networkInfo==null){
            //无网络
            return -1;
        }
        //获取网络状态
        NetworkInfo.State state=networkInfo.getState();
        if(state!=NetworkInfo.State.CONNECTED){
            return 0;
        }
        //获取网络类型
        int type=networkInfo.getType();
        if(type==ConnectivityManager.TYPE_WIFI){
            return 1;
        }
        else if (type==ConnectivityManager.TYPE_MOBILE) {
            //获取网络子类型
            int subtype=networkInfo.getSubtype();
            if(subtype== TelephonyManager.NETWORK_TYPE_LTE|subtype==TelephonyManager.NETWORK_TYPE_IWLAN){
                //4G
                return 2;
            } else if (subtype==TelephonyManager.NETWORK_TYPE_NR) {
                //5G
                return 3;
            }
            else {
                //其他移动数据连接
                return 4;
            }
        }
        else {
            //其他网络连接
            return 5;
        }
    }
}

二、开关网络

Android手机的网络功能一般有两种,WiFi网络移动数据网络

1.权限

<!--查看数据网络状态,无需动态申请-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!--查看WiFi网络状态,无需动态申请-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

2.开关网络功能 

(1) WiFi网络

使用WiFiManager(WiFi管理器)获取WiFi状态及设置WiFi状态。

//获取WiFi状态
public static boolean getWiFiState(Context context){
    WifiManager wifiManager= (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    return wifiManager.isWifiEnabled();
}
    
//设置WiFi状态
public static void setWiFiState(Context context,boolean state){
    WifiManager wifiManager= (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    wifiManager.setWifiEnabled(state);
}

(2) 移动数据网络

使用ConnectivityManager(连接管理器)获取移动数据连接状态及设置连接状态;请注意因为是隐藏方法,需要通过反射调用。

//获取移动数据连接开关的状态
public static boolean getMobileDataState(Context context){
    //获取连接管理器
    ConnectivityManager connectivityManager= (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    boolean isOpen=false;
    try {
        //该方法为隐藏方法,需要通过反射调用
        String methodName="getMobileDataEnable";
        Method method=connectivityManager.getClass().getMethod(methodName);
        isOpen= (boolean) method.invoke(connectivityManager);
    }catch (Exception e){
        e.printStackTrace();
    }
    return isOpen;
}

//设置移动数据连接开关的状态
public static void setMobileDataState(Context context,boolean state){
    //获取连接管理器
    ConnectivityManager connectivityManager= (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    try{
        //该方法为隐藏方法,需要通过反射调用
        String methodName="setMobileDataEnable";
        Method method=connectivityManager.getClass().getMethod(methodName);
        method.invoke(connectivityManager,state);
    }catch (Exception e){
        e.printStackTrace();
    }
}

tag:网络连接,网络数据,WiFi,移动数据,系统服务;网络状态;网络连接状态;互联网;判断网络是否可用

  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在下嗷呜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值