Android GetDefaultSharedReferences

Android GetDefaultSharedReferences,android,sharedpreferences,Android,Sharedpreferences,我的代码是: 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中测试-返回正确值。但对

我的代码是:

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中测试-返回正确值。但对于带有2.3.7和7.1的中兴通讯刀片,结果总是错误的。我假设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时工作正常 由于Admob/,现在我使用minversion=8和target=13/进行编译。 也许有些API改变了,但我在这上面什么也没发现

解决方案:
-从快捷方式和菜单启动应用程序会给我不同的DefaultSharedReferences。从我的代码中删除DefaultSharedReferences后,它工作得非常好。我不能只说:人们不走捷径,所以我不得不改变代码。

这样试试:

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),并可以控制对它的访问。其他操作模式包括:

  • 模式\世界\可读
  • 模式\世界\可写
  • 多模式过程

如果您已升级到目标API 30,请在gradle dependencies中删除此项:

implementation'androidx.preference:preference ktx:1.0.0'//用于Kotlin
项目

implementation 'androidx.preference:preference:1.1.1'//For Java Projects
重新同步Gradle后,请更改从中导入的所有内容

import android.preference.PreferenceManager


有些设备随机丢失SharedReferences数据并非闻所未闻。请参阅以获取示例。此信息是否仅与GetDefaultSharedReferences相关?你知道关于GetSharedReferences(“myAppPrefs”,Context.MODE_PRIVATE)的相同问题吗?尝试使用GetSharedReferences而不是默认的。它在getPreferenceScreen().GetSharedReferences().RegisterOnSharedReferenceChangeListener(此)中工作良好;说警告和反对!我们现在怎么办?嗯。。。似乎操作系统版本弄乱了软件包的名称。查看我的问答,了解共享首选项功能的不同:从快捷方式和菜单启动应用程序会给我不同的默认共享首选项。从我的代码中删除DefaultSharedReferences后,它工作得非常好。我不能只是说:人们不做shrottcuts,所以我不得不改变代码。
import androidx.preference.PreferenceManager