2
PreferenceManager.getDefaultSharedPreferences(context)

getPreferences()

似乎检索不同的首选项。

PreferenceManager.getDefaultSharedPreferences(context).getBoolean(
                        "userWasAskedToEnableGps", false);

对我来说返回假,

getPreferences(MODE_PRIVATE).getBoolean("userWasAskedToEnableGps", false);

返回真。

首选项是用编辑器编写的,例如

Editor e = getPreferences(MODE_PRIVATE).edit(); 
e.putBoolean (...);
e.commit();

如何从 Context 中获取 Activity 之外的相同首选项?

4

3 回答 3

13

根据文档

getSharedPreferences()-如果您需要多个按名称标识的首选项文件,请使用此选项,您可以使用第一个参数指定该名称。

getPreferences()-如果您的活动只需要一个首选项文件,请使用此选项。因为这将是您的活动的唯一首选项文件,所以您不提供名称。 范围仅限于创建它的活动

因此,如果您希望偏好在另一个活动或上下文中可用,您必须使用getSharedPreferences()getDefaultSharedPreferences()

This ans解释了两者之间的区别。

于 2013-08-13T09:06:18.430 回答
9

从 android github repo( 1 ) 中,我们可以看到除了使用当前类名getPreferences调用方法之外什么也没做。getSharedPreferences

public SharedPreferences getPreferences( int mode ) {
    return getSharedPreferences( getLocalClassName(), mode );
}

没有什么限制其他活动/代码访问具有适当类名的共享首选项。更重要的是,我喜欢使用getPreferences,因为这意味着 => 永远不会更改 Activity 名称。如果您更改,请注意访问共享首选项,并明确提及较早的类名(升级之前)。

于 2015-02-05T08:25:03.707 回答
1

使用具有相同常量名称的Context.getSharedPreferences,它将在应用程序的任何位置为您提供相同的首选项。

于 2013-08-13T09:05:10.693 回答