Файл настроек пользователя и файл настроек приложения - PullRequest
9 голосов
/ 23 июня 2010

У моего приложения для Android есть два вида предпочтений:

1) У меня есть пользовательские настройки , определенные в файле res / xml / preferences.xml, чтобы пользователи могли управлять своими предпочтениями с помощью PreferenceActivity.

2) Я хотел бы определить другой файл для глобальных настроек моего приложения.

Каков наилучший способ управления настройками приложения? Должен ли я создать другой XML-файл со значениями конфигурации или я должен указать эти значения конфигурации в strings.xml? Как лучше всего управлять настройками конфигурации?

Ответы [ 3 ]

6 голосов
/ 23 июня 2010

Файлы настроек не сохранены в /res/xml/defaults.xml

проекта. Они хранятся на устройстве в папке вашего приложения, например,

/data/data/com.your.pkg/default.prefs

Попробуйте не указыватьимя файла, так как у вас будут некоторые проблемы с файлами предпочтений, как это было в этом вопросе в этом вопросе: Как мне получить настройки для работы в Android?

SharedPreferences preferences = PreferenceManager
                    .getDefaultSharedPreferences(context);

Тогда вывероятно, придется запросить

preferences.getString('weightPref', null);

Многие приложения могут предоставлять способ захвата пользовательских настроек в настройках конкретного приложения или действия.Для поддержки этого Android предоставляет простой набор API.

Предпочтения обычно представляют собой пары имя-значение.Они могут быть сохранены как «Общие настройки» для различных действий в приложении (обратите внимание, что в настоящее время они не могут быть общими для всех процессов).Или это может быть что-то, что необходимо сохранить для конкретной деятельности.

  1. Общие настройки: Общие настройки могут использоваться всеми компонентами (действиями, службами и т. Д.) Приложений.

  2. Предпочтения, связанные с действием: эти предпочтения могут использоваться только в упражнении и не могут использоваться другими компонентами приложения.

Общие настройки:

Управление общими настройками осуществляется с помощью метода getSharedPreferences класса Context.Предпочтения хранятся в файле по умолчанию (1), или вы можете указать имя файла (2), которое будет использоваться для ссылки на предпочтения.

(1) Вот как вы получаете экземпляр, когда вы указываетеимя файла

public static final String PREF_FILE_NAME = "PrefFile";
   SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);

MODE_PRIVATE - режим работы для предпочтений.Это режим по умолчанию и означает, что созданный файл будет доступен только вызывающему приложению.Поддерживаются два других режима: MODE_WORLD_READABLE и MODE_WORLD_WRITEABLEMODE_WORLD_READABLE другое приложение может прочитать созданный файл, но не может изменить его.В случае MODE_WORLD_WRITEABLE другие приложения также имеют права на запись для созданного файла.

(2) Рекомендуемый способ - использовать в режиме по умолчанию, без указания имени файла

SharedPreferences preferences = PreferencesManager.getDefaultSharedPreferences(context);

Наконец, когда у вас есть экземпляр настроек, вот как вы можете извлечь сохраненные значения из настроек:

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

К сохранить значения в файле настроек SharedPreference.Editor объект должен быть использован.Editor - это вложенный интерфейс класса SharedPreference.

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.Пакет определяет классы для реализации пользовательского интерфейса предпочтений приложения.

Чтобы увидеть еще несколько примеров, ознакомьтесь с публикацией Android Data Storage на сайте разработчиков.

1 голос
/ 10 июля 2010

Предположим, что ваш xml выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
   <CheckBoxPreference android:key="gpsOn" 
                    android:summaryOff="GPS is Off"
                    android:summaryOn="GPS is On" 
                    android:title="GPS State"></CheckBoxPreference>

Я предполагаю, что вы используете PreferenceActivity для загрузки настроек из вашего xml.Таким образом, в своей деятельности вы делаете addPreferencesFromResource(R.xml.application_pref);

Когда вы делаете это, по умолчанию все значения сохраняются в стандартном SharedPreference приложения.Вы можете получить доступ к этим настройкам в любом месте.Поэтому из какой-либо другой деятельности / службы просто выполните:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
boolean value = prefs.getBoolean("gpsOn", false);

И точно так же вы должны получить предпочтения пользователя в value.

0 голосов
/ 09 сентября 2010

Вероятно, лучший способ установить глобальную конфигурацию предпочтений для приложения - определить элементы метаданных в манифесте Android

...