Android-实时监听网络状态变化(观察者)

本文介绍了如何在Android应用中实时监听网络状态变化,通过广播接收器捕获网络变化广播,结合观察者模式通知相关组件。详细步骤包括创建广播接收器、注册与注销广播、实现观察者接口以及在Activity中使用该机制。
摘要由CSDN通过智能技术生成
写在前面:

直接复制 1 的工具类和 5 的两个类到项目中,就能使用哦,如果你不想看中间的过程的话。就是这么贴心的喔~


实现流程概括

首先,我们要实现实时监听,肯定要用到广播机制:Android系统在网络状态发生变化时会发送一条广播,所以我们首先要做的就是写一个广播接收器,接收这条广播。

那接收之后呢?

接收之后再通知所有的观察者,网络有变化了,这里就要用到观察者模式了。(不知道观察者模式也没关系,其实就和回调的机制差不多,不知道回调是什么的话…或许之后我会专门写一篇?)

over,就这么简单。

1、工具类(准备考试)

开始之前,复制这几个工具类到你的项目中,为后面的主要工作做准备。

首先是一个枚举,列举的是几种网络状态。

public enum NetworkType {
   

    NETWORK_WIFI("WiFi"),
    NETWORK_4G("4G"),
    NETWORK_2G("2G"),
    NETWORK_3G("3G"),
    NETWORK_UNKNOWN("Unknown"),
    NETWORK_NO("No network");

    private String desc;
    NetworkType(String desc) {
   
        this.desc = desc;
    }

    @Override
    public String toString() {
   
        return desc;
    }
}

然后是一个网络工具类,用来返回网络连接状态的类型。

public class NetworkUtil {
   

    private NetworkUtil() {
   
        throw new UnsupportedOperationException("u can't instantiate me...");
    }

    @RequiresPermission("android.permission.ACCESS_NETWORK_STATE")
    private static NetworkInfo getActiveNetworkInfo(Context context) {
   
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        return cm.getActiveNetworkInfo();
    }

    /**
     * 获取当前网络类型
     * 需添加权限 {@code <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>}
     */
    @RequiresPermission("android.permission.ACCESS_NETWORK_STATE")
    public static NetworkType getNetworkType(Context context) {
   
        NetworkType netType = NetworkType.NETWORK_NO;
        NetworkInfo info = getActiveNetworkInfo(context);
        if (info != null && info.isAvailable()) {
   

            if (info.getType() == ConnectivityManager.TYPE_WIFI) {
   
                netType = NetworkType.NETWORK_WIFI;
            } else if (info.getType() == ConnectivityManager.TYPE_MOBILE) {
   
                switch (info.getSubtype()) {
   

                    case TelephonyManager.NETWORK_TYPE_TD_SCDMA:
                    case TelephonyManager.NETWORK_TYPE_EVDO_A:
                    case T
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值