Android BroadcastReceiver的onReceive方法执行多次

最近在写一个通过广播监听网络状态改变,并给用户一个提示的功能。

测试的时候发现onReceive方法竟然莫名执行了3次,我在onReceive方法中写了个吐司作为提示,这样的话就会连续产生三个吐司,用户体验相当差。网上也查了好多,基本上没有发现有用的(至少无法解决本人目前项目中遇到的问题);所有重新想了一个办法,给BroadcastReceiver加个标志判断。具体如下:

public class NetworkStateReceiver extends BroadcastReceiver {
private static final String TAG = "NetworkStateReceiver";
private boolean flag = true;//加个标志,否则onReceive方法会重复接收通知

/**
* 这是判断网络是否可用的方法
*
* @param context
* @return
*/
public static boolean isNetworkAvailable(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
//新版本调用方法获取网络状态
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Network[] networks = connectivityManager.getAllNetworks();
NetworkInfo networkInfo;
for (Network mNetwork : networks) {
networkInfo = connectivityManager.getNetworkInfo(mNetwork);
if (networkInfo.getState().equals(NetworkInfo.State.CONNECTED)) {
return true;
}
}
} else {
//否则调用旧版本方法
if (connectivityManager != null) {
NetworkInfo[] info = connectivityManager.getAllNetworkInfo();
if (info != null) {
for (NetworkInfo anInfo : info) {
if (anInfo.getState() == NetworkInfo.State.CONNECTED) {
Log.d("Network", "NETWORKNAME: " + anInfo.getTypeName());
return true;
}
}
}
}
}
return false;
}

@Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "network state changed.");
if (!isNetworkAvailable(context) && flag) {
flag = false;
ToastUtils.showShort(context, "网络连接已断开");
}
}
}

希望对大家有用!

转载于:https://www.cnblogs.com/abel-han/p/6868257.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值