5

当网络从 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”的消息,并且只调用一次 doSomething()。我应该怎么做?

谢谢你。并为我糟糕的英语感到抱歉。

4

3 回答 3

1

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

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;
于 2012-10-25T10:33:44.360 回答
0

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

公共静态int i = 0;

并将您的代码置于此条件下

if((++i)%3==1){
//your whole stuff here..
}
于 2012-10-25T11:42:59.407 回答
0

我认为您可能忘记在 onPause / onStop 中取消注册您的广播接收器。

于 2012-10-25T12:22:41.307 回答