如何判断网络连接状态

其实这就是一个简单的工具类,只是自己记录下来方便自己以后拷贝大笑


使用场景:比如说在登录,在下载,在上传等网络操作之前,我们可以先判断下当前网络状态,如果没有网络,就给予提示.而当在下载等需要大量流量的网络操作前,我们又可以先判断当前是不是wifi连接状态,避免了在3G或4G网络下造成大量的流量损失.


public class NetWorkUtil {
    private static ConnectivityManager connectManager;
    //这个方法判断当前状态是否有网络
    public static boolean havaNetWork(Context context) {
        //获取网络连接管理者对象
        connectManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        //获取网络状态信息
        NetworkInfo info = connectManager.getActiveNetworkInfo();
        if (info == null || !info.isConnected()) {
            return false;
        }
        if (info.isRoaming()) {
            //漫游状态
            return false;
        }
        return true;
    }
 //这个方法用来判断是否wifi模式
    public static boolean isWifi() {
        if (connectManager != null) {
            //拿到所有的网络连接信息数组
            NetworkInfo[] info = connectManager.getAllNetworkInfo();
            if (info != null) {
                for (int i = 0; i < info.length; i++) {
                    if (info[i].getTypeName().equals("WIFI") && info[i].isConnected()) {
                        return true;
                    }
                }
            }
        }
        return false;
    }
}

在这里,写成了工具类,2个静态方法一个是判断当前有无网络,另外个方法判断当前是不是wifi网络连接.接下来我们就测试一下.


public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        boolean b = NetWorkUtil.havaNetWork(this);
        boolean wifi = NetWorkUtil.isWifi();
        Toast.makeText(this,b == true? "当前有网络" :"当前无网络",Toast.LENGTH_SHORT).show();
        Toast.makeText(this,wifi == true? "当前wifi连接":"当前wifi没有连接",Toast.LENGTH_SHORT).show();
    }
}
测试结果如下:


当然还有很多方法可以去尝试
                getDetailedState():获取详细状态。
                getExtraInfo():获取附加信息。
                getReason():获取连接失败的原因。
                getType():获取网络类型(一般为移动或Wi-Fi)。
                getTypeName():获取网络类型名称(一般取值“WIFI”或“MOBILE”)。
                isAvailable():判断该网络是否可用。
                isConnected():判断是否已经连接。
                isConnectedOrConnecting():判断是否已经连接或正在连接。
                isFailover():判断是否连接失败。
                isRoaming():判断是否漫游
当用wifi上的时候
                getType 是WIFI
                getExtraInfo是空的
                
                当用手机上的时候
                getType 是MOBILE
                用移动CMNET方式
                getExtraInfo 的值是cmnet
                用移动CMWAP方式
                getExtraInfo 的值是cmwap   但是不在代理的情况下访问普通的网站访问不了
                用联通3gwap方式
                getExtraInfo 的值是3gwap
                用联通3gnet方式
                getExtraInfo 的值是3gnet
                用联通uniwap方式
                getExtraInfo 的值是uniwap
                用联通uninet方式
                getExtraInfo 的值是uninet

用法:

1:用在广播中,监听系统中的网络变化

2:网络连接失败时,进行故障切换,比如说弹出个对话框引导你检验网络

3:在下载时,由wifi变为手机网络的时候要暂停下载任务,并提示要不要继续
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值