解决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地址

猜你喜欢

转载自blog.csdn.net/glc11223344/article/details/102711078