PreferenceManager.getDefaultSharedPreferences(context)
和
getPreferences()
似乎检索不同的偏好设置。
PreferenceManager.getDefaultSharedPreferences(context).getBoolean(
"userWasAskedToEnableGps", false);
对我来说返回false,
getPreferences(MODE_PRIVATE).getBoolean("userWasAskedToEnableGps", false);
返回true。
Preference是用像
这样的编辑器编写的Editor e = getPreferences(MODE_PRIVATE).edit();
e.putBoolean (...);
e.commit();
如何从上下文中获取活动之外的相同首选项?
答案 0 :(得分:13)
根据docs
getSharedPreferences()
- 如果您需要使用第一个参数指定的名称标识的多个首选项文件,请使用此选项。
getPreferences()
- 如果您的活动只需要一个偏好设置文件,请使用此选项。因为这将是您的活动的唯一首选项文件,所以您不提供名称。 范围仅限于创建活动的活动
因此,如果您希望首选项在其他活动或上下文中可用,则必须使用getSharedPreferences()
或getDefaultSharedPreferences()
这ans解释了两者之间的区别。
答案 1 :(得分:9)
从android github repo(1),我们可以看到getPreferences
除了使用当前类名调用getSharedPreferences
方法之外什么都不做。
public SharedPreferences getPreferences( int mode ) {
return getSharedPreferences( getLocalClassName(), mode );
}
没有任何限制其他活动/代码使用适当的类名访问共享首选项。更重要的是,我更喜欢不来使用getPreferences
,因为这意味着=>永远不会更改活动名称。如果你改变了,那么请注意访问共享偏好,并明确提到早期的类名(升级前)。
答案 2 :(得分:1)
使用具有相同常量名称的Context.getSharedPreferences,它会在您应用的任何位置为您提供相同的偏好设置。