android开发技巧android项目知识点系列专题

android 在也不用为网络监听而发愁了

2020-03-10  本文已影响0人  android源码探索

欢迎大家下载我个人开发的app安琪花园

简介


网络监听可以说是在app中基本上会遇到的一个功能。 但是每次都写广播感觉相当麻烦,
自从写了这个库以后,以后项目里面要监听网络变化只需要添加注解即可

使用


image.png

只 需要在方法上面添加相应的注解就能监听网络的变化

具体的使用细节


在项目的根目录下面的build.gralde添加maven仓库。

 maven { url "https://dl.bintray.com/richzjc/maven" }

其次是在module的build.gradle引用

如果项目用的kotlin 请将annotationProcessor 改成kapt
annotationProcessor 'com.richzjc:netChange_compiler:1.0.5'
implementation 'com.richzjc:network_change:1.0.5'

因为项目使用了apt的技术,在编译期会生成类, 而这个类的包名和类名
需要在对应的module的gralde中配置

javaCompileOptions {
            annotationProcessorOptions {
                arguments = [ netIndex : '包名.类名' ]
            }
        }

比如说包名+类名为: com.richzjc.net.MyNetIndex
则最后会生成MyNetIndex的类:
如:

public class MyEventBusIndex implements SubscribeInfoIndex {
  private static final Map<Class, SimpleSubscribeInfo> SUBSCRIBER_INDEX;

  static {
    SUBSCRIBER_INDEX = new HashMap<Class, SimpleSubscribeInfo>();
    List<SubscribeMethod> availableList;
    List<SubscribeMethod> loseList;
    List<SubscribeMethod> changeList;
    availableList = new ArrayList();
    loseList = new ArrayList();
    changeList = new ArrayList();
    availableList.add(new SubscribeMethod("test1", null));
    loseList.add(new SubscribeMethod("test", null));
    changeList.add(new SubscribeMethod("test2", NetType.AUTO));
    changeList.add(new SubscribeMethod("test3", NetType.WIFI));
    SUBSCRIBER_INDEX.put(MainActivity.class, new SimpleSubscribeInfo(availableList, loseList, changeList));
  }

  @Override
  public Map<Class, SimpleSubscribeInfo> getSubscriberInfo() {
    return SUBSCRIBER_INDEX;
  }
}

在 使用这个库的时候需要在对应的Application下面初始化:
将apt生成的类添加到NetManager里面。 然后调用init方法

NetManager.addIndex(new MyNetIndex());
NetManager.init(this);

最后如果在MainActivity里面想要添加网络监听,则需要在MainActivity里面
添加注册与 反注册的方法:

如: 在Oncreate里面添加注册:

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        NetManager.bind(this);
    }

一般在ondestroy方法里面添加反注册

@Override
    protected void onDestroy() {
        super.onDestroy();
        NetManager.unBind(this);
    }

如果按照以上配置好了。 那么在MainActivity里面添加的代码
就能够监听到网络的变化. 下面的这些代码就能监听到网络的变化

 @NetLose
    public void test(){
        Toast.makeText(this, "没有网络了", Toast.LENGTH_LONG).show();
    }

    @NetAvailable
    public void test1(){
        Toast.makeText(this, "连接上网络了", Toast.LENGTH_LONG).show();
    }

    @NetChange(netType = NetType.AUTO)
    public void test2(){
        Toast.makeText(this, "有网络了Auto", Toast.LENGTH_LONG).show();
    }

    @NetChange(netType = NetType.WIFI)
    public void test3(){
        Toast.makeText(this, "有网络了Wife", Toast.LENGTH_LONG).show();
    }

详细说明


NetAvailable

监听到有网络

NetLose

监听没有网络

NetChange

该注解需要传一个netType
netType有四个取值可能

public enum NetType {
    AUTO, WIFI, MOBILE, NONE;
}

当netType传为AUTO 就相当于NetAvailable
当netType传为NONE就相当于 NetLose
当netType传为MOBILE就相当于 监听除wifi以外的网络
当netType传为WIFI就相当于 监听wifi

gitHub地址

相关文章

kotlin DSL开发
android 面试题
android 夜间模式的切换
快速获取Bundle里面参数
android EventBus源码阅读
AOP之动态代理原理
Handler源码理解
IOC框架之Dagger详解

上一篇下一篇

猜你喜欢

热点阅读