android网络广播接受多次,解决网络监听多次发送广播的问题

有时候我们需要写一个程序来监听网络的变化,以实现即时刷新的问题,比如微信或者QQ都有自动重连的功能。单纯的用广播接收和ConnectivityManager难以实现,因为每次我们切换g网和wifi或者启用一个网络,系统都会发送多次网络变化的广播,如果我们把业务逻辑放在广播接收器里面处理,就会不必要的调用多次。比如当我们启动wifi时,系统将发送多次广播,当我们判断是否有网络连接的时候,会多次判断有网络(如果刚刚启动数据流量或者wifi)。这样里面的代码就会重复执行。想了各种办法,最终想到的解决方案如下。就是设置一个标记变量,稍微看一下就明白了:

package com.example.mywork;

import java.util.Date;

import java.util.Timer;

import java.util.TimerTask;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.content.IntentFilter;

import android.net.ConnectivityManager;

import android.net.NetworkInfo;

public class InternetState

{

private boolean update = false;

private Date lastConnTime;

OnInternetListener internetListener;

Context context;

protected void setInternetListener(OnInternetListener listener,Context context)

{

internetListener = listener;

if(internetListener==null||context==null)

return ;

IntentFilter filter = new IntentFilter();

filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");

context.registerReceiver(new NetState(), filter);

}

private class NetState extends BroadcastReceiver

{

@Override

public void onReceive(Context context, Intent intent)

{

ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo gprs = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

NetworkInfo wifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

NetworkInfo info = connManager.getActiveNetworkInfo();

if(!update&&(wifi.isConnected()||gprs.isConnected()))//有网但是还没刷新

{

update = true;

System.out.println("111111111111111");

}

else if(!wifi.isConnected()&&!gprs.isConnected())//没网

{

update = false;

}

}

}

}

原文:http://blog.csdn.net/runninghui/article/details/41850111

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值