62

私のコードは次のとおりです。

final String eulaKey = "mykey";
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
boolean hasBeenShown = prefs.getBoolean(eulaKey, false);

OS のバージョンに応じて、常に異なる値を返します。2.2、2.3.4、3.2、4.0.3 でテスト済み - 正しい値を返します。ただし、CianogenMod 7.1 を使用した 2.3.7 のデバイス Zte ブレードの場合、結果は常に false です。getBoolean のデフォルト値だと思います。

ブール値を記述するコードは次のとおりです。

final String eulaKey = "mykey";
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean(eulaKey, true);
editor.commit();

誰にもアイデアはありますか?

更新: 現在のコードを以前のバージョンのコードと比較すると、コードに違いはありません。唯一の違いはマニフェストです: コードは minVersion=8 と targetVersion=8 で正常に動作します 今、私は minversion=8 と target=13 でコンパイルしています /because Admob/. 一部の API が変更された可能性がありますが、これについては何も見つかりませんでした。

解決策: -ショートカットとメニューからアプリを起動すると、異なる DefaultSharedPreferences が表示されます。私のコードから DefaultSharedPreferences を削除した後、完璧に動作します。私はただ言うことはできません: 人々はショートカットを作らないので、コードを変更しなければなりませんでした.

4

2 に答える 2

63

このようにしてみてください:

final String eulaKey = "mykey";
Context mContext = getApplicationContext();
mPrefs = mContext.getSharedPreferences("myAppPrefs", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = mPrefs.edit();
editor.putBoolean(eulaKey, true);
editor.commit();

この場合、独自の設定ファイル名 (myAppPrefs) を指定して、そのファイルへのアクセス許可を制御できます。その他の動作モードは次のとおりです。

  • MODE_WORLD_READABLE
  • MODE_WORLD_WRITEABLE
  • MODE_MULTI_PROCESS
于 2012-05-28T15:04:04.797 に答える