android ConnectivityManager 监听网络变化问题

Android 码拜 7年前 (2015-07-11) 795次浏览 0个评论
 

public class NetStatReceiver extends BroadcastReceiver {
public static final String netACTION = “android.net.conn.CONNECTIVITY_CHANGE”;
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
this.context = context;
if (intent.getAction().equals(netACTION)) {
// Intent中ConnectivityManager.EXTRA_NO_CONNECTIVITY这个关键字表示着当前是否连接上了网络
boolean isBreak = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
if (!isBreak) {//有网络
//3G跟WIFI切换的时候,会收到三个这样的广播,第一个广播把wifi连接上,第二个广播到3G关闭掉,第三个广播把wifi连接上。但是我这里只想提醒用户一次啊,怎么把另外两次提醒屏蔽掉呢?谁有好的方法,android方面着手的,或者java方面着手的。
}else {
}

 
可以收到广播后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(有网){
i++;
if(i%3 == 0){
Toast……………………….
}
}


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明android ConnectivityManager 监听网络变化问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!