解决android实时监控网络,广播重复接收的问题

解决android实时监控网络状态,广播重复接收的问题

当我们想要在自己的项目中,实现网络状态的监控,例如:当网络状态发生变化时,我们给出Dialog提示。我们会使用广播来实现。
不过在使用中我们会发现,那就是广播会重复接收。也就是说,我们在网络状态发生变化时,会接收2次。我们如果使用Dialog给出提示,那么它就会被多次执行,即弹出2次。(此文用Toast代替dialog)
下面就来解决一下广播重复接收的问题。
1、首先定义一个布尔变量,用来记录广播的执行

private static boolean isNetAvailable=false;  //声明布尔变量控制广播执行
private  nteWorkChangeReceive;//广播
private IntentFilter intentFilter;

广播

class NteWorkChangeReceive extends BroadcastReceiver{
        @Override
        public void onReceive(Context context, Intent intent) {
            ConnectivityManager connectivityManager=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo=connectivityManager.getActiveNetworkInfo();
              //网络连接成功执行此段代码
            if(networkInfo!=null&&networkInfo.isAvailable()){
                if(!isNetAvailable){
                    isNetAvailable=true;
                    Toast.makeText(context, "网络连接", Toast.LENGTH_SHORT).show();
                    Log.d("Receive1", "连接");
                }
            }else {
            //网络连接失败执行此段代码
                if(isNetAvailable){
                    isNetAvailable=false;
                    Toast.makeText(context, "网络断开", Toast.LENGTH_SHORT).show();
                    Log.d("Receive1", "断开");
                }
            }
        }
    }

这样通过布尔变量控制就可以实现当网络状态发生变化时,仅执行一次。
在这里插入图片描述

3在Activity oncreate()中

        intentFilter=new IntentFilter();
        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        nteWorkChangeReceive=new NteWorkChangeReceive();
        registerReceiver(nteWorkChangeReceive,intentFilter);

这样就解决网络状态改变,广播重复接收问题。
Demo gitHub地址

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值