我的代码是:
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刀片 - 结果总是错误的。我想是getBoolean的默认值。
这是编写boolean的代码:
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 /因为Admob /。 也许有些API发生了变化,但我对此一无所知。
解: - 从快捷方式和菜单启动应用程序给我不同的DefaultSharedPreferences。从我的代码中删除DefaultSharedPreferences后 - 它完美无缺。我不能只说:人们不做捷径,所以我不得不改变代码。
答案 0 :(得分:54)
以这种方式尝试:
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),并可以控制对它的访问权限。其他操作模式包括:
答案 1 :(得分:2)
如果您已升级到目标 API 30,请将其放入您的 gradle 依赖项中:
implementation 'androidx.preference:preference-ktx:1.0.0'//For Kotlin
项目
implementation 'androidx.preference:preference:1.1.1'//For Java Projects
重新同步 Gradle 后,将所有导入更改为
import android.preference.PreferenceManager
到
import androidx.preference.PreferenceManager