5

ネットワークが GPRS から Wifi に切り替わったときに、android.net.conn.CONNECTIVITY_CHANGE の Broadcast を 3 回受信しました。

onReceive()では、以下のコードでWifiが接続されているかどうかを判断しています。しかし、「Wifi Connected」のメッセージも 3 回受信し、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" のメッセージを 1 つだけ受信し、doSomething() を 1 回だけ呼び出したい。どうすればいいですか?

ありがとうございました。そして私の下手な英語でごめんなさい。

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 クラスで整数変数を宣言します...

public static 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 に答える