web-dev-qa-db-ja.com

Android getDefaultSharedPreferences

私のコードは:

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();

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

更新:現在のコードと以前のバージョンのコードを比較します-コードに違いはありません。マニフェストにあるのは違いだけです。コードは、Ok with minVersion = 8 and targetVersion = 8で動作します。現在、Minversion = 8およびtarget = 13でコンパイルしています。Admob/のため。しかし、これには何も見つかりませんでした。

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

53
Kostadin

この方法で試してください:

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
55