AndroidNetworkWatcher:简化网络监听业务代码

作者:MichaelX
链接:https://juejin.cn/post/6844903968804438024

前言

Android开发中经常遇到需要监听网络变化的场景,比如播放,比如访问网络时进行断网提示,于是有了今天的AndroidNetworkWatcher。

项目地址

AndroidNetworkWatcher:github.com/xiong-it/An…

技术原理

主要是将网络变化监听广播进行了封装,同时定义运行时注解,在网络变化时调用业务层代码,通知网络变化。

用法

由于还没上传到jcenter,无法通过gradle远程依赖,读者可以自行下载源码本地依赖,或者参考源码自己封装。

  1. 在Application中初始化Watcher:
public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        NetworkStateWatcher.getDefault().init(this);
    }
}
  1. 注册观察者,以Activity举例
@Override
protected void onStart() {
    super.onStart();
    // 注册网络监听,传入Object类型参数
    NetworkStateWatcher.getDefault().registerObserver(this);
}
  1. 注销观察者,以Activity举例
@Override
    protected void onStop() {
        super.onStop();
        // 注销网络监听,传入Object类型参数
        NetworkStateWatcher.getDefault().unRegisterObserver(this);
    }
  1. 定义接收网络变化的函数(2种方法)

    4.1 第一种:监听所有网络变化

    /**
     * 网络发生变化
     *
     * @param type 网络类型
     */
    @NetworkStateChanged(notifyOnAppStart = false)
    void onNetworkStateChanged(int type) {
        switch (type) {
            case NetworkTypeEnum.NETWORK_2G:
            case NetworkTypeEnum.NETWORK_3G:
            case NetworkTypeEnum.NETWORK_4G:
                // 切换到移动网络
                break;
    
            case NetworkTypeEnum.NETWORK_WIFI:
                // 切换到wifi
                break;
    
            case NetworkTypeEnum.NETWORK_NO:
                // 断网
                break;
        }
    }

    4.2 第二种:监听特定的网络变化

    // 监听网络切换到wifi
    @OnNetworkTypeChangedTo(type = NETWORK_WIFI)
    void onWifiConnected() {
        Toast.makeText(  this, "NetworkStateChanged>>>WIFI", Toast.LENGTH_SHORT).show();
    }
    
    // 监听网络切换到移动网络
    @OnNetworkTypeChangedTo(type = NetworkTypeEnum.NETWORK_MOBILE)
    void onMobileNetworkConnected() {
        Toast.makeText(this, "NetworkStateChanged>>>Mobile networks", Toast.LENGTH_SHORT).show();
    }
  2. 在app主界面停止网络监听 在退出app时,即在app的Activity栈的最后一个Activity的onDestroy方法中停止网络监听,lib中也就是注销网络监听广播。

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 在app主界面/栈中最后一个Activity停止网络监听
        NetworkStateWatcher.getDefault().stopWatch();
    }

结语

也没用什么高大上的技术,观察者、注解、反射、广播接收者。仅此而已,但却可以简化业务层代码,方便你我他。 AndroidNetworkWatcher:github.com/xiong-it/An…

// TODO

  1. 上传到jcenter仓库,方便gradle远程依赖
  2. 利用apt或者tranform进一步简化业务代码
  3. 收集issue意见
  4. 欢迎讨论交流


 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值