Мое приложение андроида имеет два вида предпочтений:
1) Мне определили пользовательские настройки в res/xml/preferences.xml так, чтобы пользователи могли управлять своими предпочтениями с PreferenceActivity.
2) Я хотел бы определить другой файл для глобальных предпочтений конфигурации моего приложения.
Что лучший способ состоит в том, чтобы управлять моими предпочтениями конфигурации приложения? Я должен создать другой XML-файл со значениями конфигурации, или я должен указать те значения конфигурации в strings.xml? Какова лучшая практика для управления предпочтениями конфигурации?
Файлы предпочтений не хранятся в папке проекта /res/xml/defaults.xml
Они хранятся на устройстве в папке вашего приложения, что-то вроде
/data/data/com.your.pkg/default.prefs
Попробуйте не указывать имя файла, так как у вас будут некоторые проблемы с файлами предпочтений, как у этого OP в этом вопросе: Как заставить предпочтения работать в Android?
SharedPreferences preferences = PreferenceManager
.getDefaultSharedPreferences(context);
Тогда вам, вероятно, придется сделать запрос
preferences.getString('weightPref', null);
Многие приложения могут предоставлять способ сбора предпочтений пользователя по настройкам конкретного приложения или действия. Для поддержки этого Android предоставляет простой набор API.
Предпочтения обычно представляют собой пары имя-значение. Они могут храниться как "Общие предпочтения" в различных действиях приложения (обратите внимание, что в настоящее время они не могут быть общими для разных процессов). Или это может быть что-то, что должно храниться конкретно для какого-то вида деятельности.
Общие предпочтения: Общие предпочтения могут использоваться всеми компонентами (действиями, сервисами и т.д.) вне приложения.
Предпочтения, управляемые деятельностью: Эти предпочтения могут быть использованы только в деятельности и не могут быть использованы другими компонентами приложения.
Общие предпочтения:
Управление общими предпочтениями осуществляется с помощью метода 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_WRITEABLE
. В MODE_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();
Editor также поддерживает такие методы, как remove()
и clear()
для удаления значения предпочтения из файла.
Activity Preferences:
Общие предпочтения могут использоваться другими компонентами приложения. Но если вам не нужно делиться предпочтениями с другими компонентами и вы хотите иметь частные предпочтения деятельности. Вы можете сделать это с помощью метода 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
. Пакет определяет классы для реализации пользовательского интерфейса предпочтений приложения.
Чтобы посмотреть другие примеры, ознакомьтесь с постом Data Storage на сайте разработчиков Android.
Предположим, что ваш 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
.