当网络从GPRS切换到Wifi时接收3次广播

时间:2012-10-25 10:18:24

标签: android

当网络从GPRS切换到Wifi时,我收到了3次android.net.conn.CONNECTIVITY_CHANGE广播。

在onReceive()中,我使用下面的代码来判断Wifi是否连接。但是我也收到了3次“Wifi Connected”的消息,并且doSomething()被调用了3次。

ConnectivityManager connManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo wifiInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if(wifiInfo.isConnected()) {
    Log.v(Constant.APP_NAME, "Wifi Connected.");
    doSomething();
}

我只想收到一条“Wifi Connected”的消息,并且仅在ONCE上调用doSomething()。 我该怎么办?

谢谢。抱歉我的英语很差。

3 个答案:

答案 0 :(得分:1)

创建一个检查messsage的布尔标志值 如果你希望它可以从其他地方访问它,请将其设置为静态 例如

public static boolean flagConnected = false;

ConnectivityManager connManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo wifiInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if(wifiInfo.isConnected() && flagConnected == false) {
flagConnected = true;
Log.v(Constant.APP_NAME, "Wifi Connected.");
doSomething();
}

doSomething()之后;你可以再次将标志的值更改为false

ClassName.flagConnected = false;

答案 1 :(得分:0)

在Receiver类中声明一个整数变量...

public static int i = 0;

并将您的代码置于此条件

if((++i)%3==1){
//your whole stuff here..
}

答案 2 :(得分:0)

我想您可能忘记在onPause / onStop中取消注册您的broadcastreceiver。