1

画面がオンになったときに機内モードをオンまたはオフにする(ユーザーの選択に応じて)コードを書いています。ユーザーが選択できるフラグを保持しています(オフの場合は0、オンの場合は1)。ただし、何らかの理由で、ユーザーが何を選択しても、アクティビティ(airplanei)の値は常に1になります。エラーは私が投稿したコードのどこかにあると確信しています。SharedPreferencesの誤った使用が最も可能性が高いです。

アクティビティのコード:-

protected void airplane(int i) {
    // Store flag in SharedPreferences
    SharedPreferences flags = this.getSharedPreferences("toggleflags",
                    MODE_WORLD_READABLE);
    SharedPreferences.Editor editor = flags.edit();
    if (i == 0)
        editor.putInt("airplanei", 0);
    else if (i == 1)
        flags.edit().putInt("airplanei", 1);
    else if (i == -1)
        flags.edit().putInt("airplanei", -1);
    editor.commit();
}

放送受信機のコード:-

public class Screen_On extends BroadcastReceiver{
@Override
public void onReceive(final Context context, Intent intent) {
    SharedPreferences flag = context.getSharedPreferences("toggleflags", 0);
    int i = flag.getInt("airplanei", 1);
    if (i == 0) {
            //Code to turn airplane mode off
    } else if (i == 1) {
            //Code to turn airplane mode on
    }
    }
}

御時間ありがとうございます。

4

2 に答える 2

1

(i == 0) の場合は editor.putInt() を使用し、(i == 1) および (i == -1) の場合は flags.edit() を使用します。

それらすべてに editor.putInt() を使用する必要があると思います。

于 2012-05-29T20:42:35.087 に答える
1

@Mattがすでに言ったように、実際には2つの新しいインスタンスを作成しますがEditor、最初にコミットするだけです:

flags.edit().putInt("airplanei", 1); // New editor here
...
flags.edit().putInt("airplanei", -1);
...
editor.commit(); // Commit first editor instance
于 2012-05-29T20:47:42.793 に答える