美文网首页android开发技巧android项目知识点系列专题
android 在也不用为网络监听而发愁了

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

作者: android源码探索 | 来源:发表于2020-03-10 12:08 被阅读0次

    欢迎大家下载我个人开发的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详解

    相关文章

      网友评论

        本文标题:android 在也不用为网络监听而发愁了

        本文链接:https://www.haomeiwen.com/subject/cwfwdhtx.html