public class NetStatReceiver extends BroadcastReceiver { |
|
可以收到广播后cancel之前的任务,delay执行当前任务。
|
|
ConnectivityManager.TYPE_WIFI 可以直接判断网络类型 剩下的你懂的
|
|
求代码啊!怎么cancel之前的任务啊!
|
|
我知道可以。但是你看清楚我的需求啊! 因为每次网络变化都会接收到这个广播!3G切换到wifi的时候。有三个广播发出来的。第一个是wifi连接。第二个是3G关闭。第三个是wifi连接。所以在这里处理的时候,会处理了三次!你在红字处system.out.println就知道会打印出三条信息了!
|
|
我想在3G网络切换到WIFI网络的时候,提醒一下用户Toast。但是这样的话,会提醒了三下!明白了没?帮帮忙啊!
|
|
收到广播之后你要干嘛呀?
之前处理过,用handler,SendMessage,填写delay的参数。发送出去msg。 第二次收到之后先cancel刚发出去的msg,再发送当前的。 这样在比较短的时间内,连续多个广播时只执行最后一次广播。 只是一种解决办法。 |
|
像是你说的这样,给点代码看看,谢谢!我就是要在连续多个广播时只执行其中一次广播,我需求就是这样!
|
|
你为什么不设置一个全局的静态变量,开始为true,提醒之前先判断该变量,如果为true就提醒,然后改为false。
这样既简单又方便啊 |
|
我看你的需求是改变网络就提醒,并只提醒一次。这样就能够实现呀。不管广播收到几次,你只要把提醒的代码放在判断里面就行了
|
|
对了,你如果是异步的话可能就不能用静态变量了,静态变量不能保证同步性,我原来在蓝牙通讯里面遇到过类似的问题。没办法,当时只能用数据库来做控制
|
|
不行啊,这个flag设置不回初始值了,那样的话如果wifi切换回3G的话,那就没提醒了啊!
|
|
你可以在每一次状态切换后将flag置为初始值不就可以了吗! |
|
那怎么过滤第二跟第三次广播。不是一样的道理么!
|
|
40分 |
NetworkInfo netInfo = (NetworkInfo) b.get(ConnectivityManager.EXTRA_NETWORK_INFO);
NetworkInfo.State state = netInfo.getState(); ConnectivityManager connectivityManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo(); if ((state == NetworkInfo.State.CONNECTED) && (activeNetInfo != null) && (activeNetInfo.getType() != netInfo.getType())) {return;} activeNetInfo.getType() != netInfo.getType() |
Bundle b = intent.getExtras();
|
|
if ((state == NetworkInfo.State.CONNECTED)
&& (activeNetInfo != null) && (activeNetInfo.getType() != netInfo.getType())) {这个判断好像不起作用耶!第二第三个广播都没跑进这里! |
|
得到actual_的帮助,现在结帖!利用activeNetInfo.getType()和netInfo.getType()的比较!观察3G跟wifi的切换。wifi跟3G的切换。判断每种情况!其实情况就几种!
|
|
既然明确的知道他走三次 那就弄一个简单的判断就好了吧。
private int i = 0;(全局的) if(有网){ |