0

私のアプリでは、USER_PRESENT と AIRPLANE_MODE のインテントを受け取る必要があります。しかし、各インテントは 2 回 (場合によっては 3 回) ブロードキャストされますが、これは望ましくありません。SharedPreferences を使用してこの問題を解決しようとしていましたが、各インテントを一意に識別する必要があります (「ID」またはタイムスタンプなどがある場合)。

以下は、onReceive 呼び出しを 1 つだけ許可しようとしたコードです。

@Override
public void onReceive(Context context, Intent intent) {

final SharedPreferences instanceCount = context.getSharedPreferences("Instances",Context.MODE_WORLD_WRITEABLE); 
   SharedPreferences.Editor instance_editor = instanceCount.edit();
    if(instanceCount.getBoolean("instance",true))
    {
        instance_editor.putBoolean("instance",false);
        instance_editor.commit();
    }
    else
    {
        instance_editor.putBoolean("instance",true);
        instance_editor.commit();
        return;
    } 
                          .
                          .
                          .
                          .
}

誰でもこれを解決するのを手伝ってくれませんか。ありがとうございました :)

4

1 に答える 1

0

これらはシステム ブロードキャストであり、ブロードキャストの回数を制御することはできません。レシーバーを冪等にします。たとえば、複数回呼び出されても同じ状態を維持します。ブロードキャストをカウントする代わりに、アプリの現在の状態を保存し、ブロードキャストを受信したときにそれを確認します。すでに目的の状態になっている場合は、何もしないでください。それ以外の場合は、状態を適切に変更して保存します。

于 2012-12-18T08:45:45.500 に答える