Intereting Posts
Android – android.view.InflateException: двоичная строка XML-файла # 8: ошибка раздувания фрагмента класса Android: Bitmap recycle () как это работает? RecyclerView.getChild (index) показывает null, когда список прокручивается (индекс перепутался) Должен ли я использовать PhoneGap вместо наращивания на Android SDK? Размер изображения Android ImageView не масштабируется с исходным изображением Как проверить появление сообщения Toast Рекомендации GC GC – когда выполняется GC, и можно ли отслеживать состояние запуска из кода? Предложения по дизайну материалов для списков с аватаром, текстом и значком Android-виджет с ListView не загружает элементы соответствия Плагин Android для Eclipse (ADT) исчезает после обновления SDK 20 Добавить видео в twitter Logcat заполнен сообщением «Неожиданное значение от nativeGetEnabledTags: 0» – как избавиться от этого? Управление проектами android из командной строки Android – обнаружение запуска приложения из дома или истории Является ли метод optionMode совместимым с ExpandableListView?

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

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

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

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

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

Solutions Collecting From Web of "Файл настроек пользователя vs Файл настроек приложения"

Файлы настроек не хранятся в файле /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 настройки управляются с помощью метода 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 объект 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 на сайте разработчиков.

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

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