在Android中,如何最好地进行“应用程序设置”?

117

我希望为一个Android应用程序存储一些应用设置(如API的URL和一些测试设置)。

我主要从事.NET开发,所以习惯于使用app.config文件来实现这个目的。在Android中实现这个功能的好方法是什么?

1个回答

159
许多应用程序可能提供一种捕获特定应用程序或活动设置中用户首选项的方法。为此,Android提供了一组简单的API。
首选项通常是名称值对。它们可以作为“共享首选项”存储在应用程序中的各个活动中(请注意,目前无法跨进程共享)。或者,它可能是需要存储在特定活动中的内容。
1. 共享首选项:所有组件(活动、服务等)都可以使用共享首选项。 2. 活动处理的首选项:这些首选项仅限于该活动中,不能由应用程序的其他组件使用。
共享首选项:
使用Context类的getSharedPreferences方法管理共享首选项。首选项存储在默认文件(1)中,或者您可以指定一个文件名(2)来引用首选项。
(1) 下面是在指定文件名时获取实例的方法
public static final String PREF_FILE_NAME = "PrefFile";
   SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);

MODE_PRIVATE是偏好设置的操作模式。这是默认模式,意味着创建的文件只能由调用应用程序访问。支持的另外两种模式是MODE_WORLD_READABLEMODE_WORLD_WRITEABLE。在MODE_WORLD_READABLE中,其他应用程序可以读取创建的文件,但不能修改它。在MODE_WORLD_WRITEABLE的情况下,其他应用程序还具有对所创建文件的写入权限。

(2) 推荐的方法是使用默认模式,而不指定文件名。

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);

最后,一旦您获取了首选项实例,以下是如何从首选项中检索存储的值:

 int storedPreference = preferences.getInt("storedInt", 0);

要在偏好设置文件中存储值,必须使用SharedPreference.Editor对象。 EditorSharedPreference类的嵌套接口。

SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

编辑器还支持remove()clear()等方法,用于从文件中删除首选项值。

活动偏好设置:

共享首选项可以被其他应用程序组件使用。但是,如果您不需要与其他组件共享首选项,并希望拥有活动的私人首选项,则可以使用活动的getPreferences()方法来实现。该getPreference方法使用活动类的名称作为首选项文件名调用getSharedPreferences()方法。

以下是获取首选项的代码:

SharedPreferences preferences = getPreferences(MODE_PRIVATE);
int storedPreference = preferences.getInt("storedInt", 0);

存储值的代码与共享首选项的情况相同。

SharedPreferences preferences = getPreference(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

你也可以使用其他方法,比如将活动状态存储在数据库中。请注意,Android 还包含一个名为 android.preference 的包。该包定义了一些类以实现应用程序偏好设置 UI。

要查看更多示例,请查看 Android 开发者网站上的 数据存储 文章。


1
谢谢。看起来我需要做的是使用一个XML文件来达到我的目的(或者也许我使用XML作为最初加载的数据),但是首选项的东西对我项目的另一个部分有用。 - Tim Almond
1
您可以使用xml文件进行初始化。您需要调用类似于 PreferenceManager.setDefaultValues(this, R.xml.profiles_preferences, false); 的函数。 - Pentium10
3
这个指南也可能很有用:http://developer.android.com/guide/topics/ui/settings.html - Hung Tran
2
+1. 只需记住一点。在设置 preferences 对象的值后,建议调用 editor.apply() 而不是 editor.commit(),因为前者将在后台处理保存。 - Anindya Chatterjee
2
我有点困惑。sharedPreferences 用于存储用户在应用中的设置,而不是应用程序的设置。用户(包括我)想知道在哪里存储应用程序设置,例如 API URL 或其他应用程序需要使用的设置以正常工作。 - albanx
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接