Файл настроек пользователя и файл настроек приложения

В моем приложении для Android есть два типа настроек:

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

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

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


person Community    schedule 23.06.2010    source источник


Ответы (3)


Файлы настроек не хранятся в /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();

Редактор также поддерживает такие методы, как 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 Хранение данных на сайте разработчиков.

person Pentium10    schedule 23.06.2010
comment
comment
Я хочу, чтобы одна сторона определила XML-файл пользовательских настроек со значениями по умолчанию в res / xml / preferences.xml, как вы упомянули, я могу получить эти настройки с помощью: PreferenceManager.getDefaultSharedPreferences (context); С другой стороны, я хочу определить в другом файле другие предпочтения для настройки моего приложения (пользователи не могут управлять этими настройками конфигурации, только код моего приложения сможет их прочитать). У меня вопрос: где я могу указать значения по умолчанию для этих настроек конфигурации, если у меня уже есть файл для пользовательских настроек (res / xml / preferences.xml). - person ; 25.06.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.

person Shashank Bharadwaj    schedule 10.07.2010

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

person Community    schedule 09.09.2010