Файл пользовательских настроек по сравнению с предпочтительным файлом Приложения

Мое приложение андроида имеет два вида предпочтений:

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

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

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

9
задан whynot 22 June 2010 в 23:39
поделиться

2 ответа

Файлы предпочтений не хранятся в папке проекта /res/xml/defaults.xml

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

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

Попробуйте не указывать имя файла, так как у вас будут некоторые проблемы с файлами предпочтений, как у этого OP в этом вопросе: Как заставить предпочтения работать в 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_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.

6
ответ дан 3 November 2019 в 04:40
поделиться

Предположим, что ваш 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.

1
ответ дан 3 November 2019 в 04:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: