android监听WIFI是否连接的广播每次都执行两次,怎么让它只发送一次广播

黄油奥特曼 2015-07-12 09:22:58
public class WifiReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub

State wifiState=null;
State mobliState=null;
ConnectivityManager cm=(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
wifiState=cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
mobliState=cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();
if(wifiState!=null&&mobliState!=null&&State.CONNECTED!=wifiState&&State.CONNECTED==mobliState){
//手机网络
Toast.makeText(context, "手机网络", 0).show();
}else if(wifiState!=null&&mobliState!=null&&State.CONNECTED!=wifiState&&State.CONNECTED!=mobliState){
//什么网络都没有
Toast.makeText(context, "什么网络都没有", 0).show();

}else if(wifiState!=null&&State.CONNECTED==wifiState){
//无线网络
Toast.makeText(context, "无线网络", 0).show();

}
}

}
上面的toast提示无线网络那个,每次都会执行两次,那么意味着在监听到无线网络的情况下,代码会执行两次,现在怎么做才能让它只执行一次呢???
...全文
3043 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Rookieek 2017-11-03
  • 打赏
  • 举报
回复
是不是在onResum()方法中实例化并且注册的?
sinat_bond 2017-10-14
  • 打赏
  • 举报
回复
引用 10 楼 lishuangling21 的回复:
用Handler发送消息延时处理广播事件,在下一次到来时清空上一次的message。这样做可能无网络提示,或者网络切换提示迟了一两秒,但是能解决这个问题,而且用户应该可以接受
感谢!!!!
gray_dog3 2017-02-17
  • 打赏
  • 举报
回复
用Handler发送消息延时处理广播事件,在下一次到来时清空上一次的message。这样做可能无网络提示,或者网络切换提示迟了一两秒,但是能解决这个问题,而且用户应该可以接受
dss_notebook 2016-03-01
  • 打赏
  • 举报
回复
这里本来就应该有两次事件发出来的,前面一个网络断开,后面一个网络连接,两次事件; 不过由于网络事件上报和wifi的连接是同步进行的,可能在你处理这个事件消息的时候,代码中再去获取wifiState=cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();这个状态已经不是上报事件的状态了,所以,就可能在你打印的时候有出现后面的网络连接的打印出现了两次
yuanhao113 2015-11-11
  • 打赏
  • 举报
回复
换个广播 WifiManager.SUPPLICANT_STATE_CHANGED_ACTION
=10_01= 2015-09-09
  • 打赏
  • 举报
回复
咋在广播接收器里判断网络是否连接呢,有点乱。 可以在请求网络前检查下网络状态,

	public static boolean isOnline(Context context) {
		ConnectivityManager connMagr = (ConnectivityManager) context
				.getSystemService(Context.CONNECTIVITY_SERVICE);
		NetworkInfo networkInfo = connMagr.getActiveNetworkInfo();
		return (null != networkInfo && networkInfo.isConnected());
	}
或者接收 WiFi 状态,然后根据状态做处理,http://www.blogjava.net/liuyanbo/archive/2012/09/17/387882.html
張叁瘋 2015-09-09
  • 打赏
  • 举报
回复
使用一个类似标志位的参数(int mark=0) ,然后在执行一次后将这个参数改变(mark=1),之后再要使用的时候再初始化(mark=0) 我正在做的东西也出现这样的情况,我就用了这样的方法,仅供参考吧~
xiaokuiing 2015-07-14
  • 打赏
  • 举报
回复
引用 4 楼 xiaokuiing 的回复:
在onReceive中,将广播终止abortBroadcast方法
这个我没有试过哈,希望没有误导你,你试试看
xiaokuiing 2015-07-14
  • 打赏
  • 举报
回复
在onReceive中,将广播终止abortBroadcast方法
黄油奥特曼 2015-07-13
  • 打赏
  • 举报
回复
真的没人解决吗?之前百度了好多,,就是也是没人解决的。,
_deadline 2015-07-13
  • 打赏
  • 举报
回复
同问,我也遇到这个问题
黄油奥特曼 2015-07-12
  • 打赏
  • 举报
回复
怎么没人啊。。。

80,360

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧