我的代码是:

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

始终根据操作系统版本返回不同的值。在2.2、2.3.4、3.2、4.0.3中进行了测试-返回正确的值。但是对于带有CianogenMod 7.1和2.3.7的设备Zte Blade -结果始终为假。我想getBoolean的默认值。

这是写 bool 值的代码:
final String eulaKey = "mykey";
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean(eulaKey, true);
editor.commit();

有人有什么主意吗?

更新:
将当前代码与以前的代码进行比较-代码没有区别。
唯一的不同在于 list :代码在minVersion = 8和targetVersion = 8时可以正常工作
现在,由于Admob/,我正在使用minversion = 8和target = 13/进行编译。
也许某些API发生了变化,但是我对此一无所获。

解决方案:
-从快捷方式和菜单启动应用程序会为我提供不同的DefaultSharedPreferences。从我的代码中删除DefaultSharedPreferences后,它可以完美工作。我不能只说:人们不做捷径,所以我不得不更改代码。

最佳答案

尝试这种方式:

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
  • 关于android - Android getDefaultSharedPreferences,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10786172/

    10-11 00:30