Как лучше всего делать «настройки приложения» в Android? [закрыто]

108

Я хотел бы сохранить некоторые настройки приложения (например, URL-адрес API и некоторые настройки для тестирования) для приложения Android.

В основном я работаю разработчиком .NET , поэтому привык использовать файл app.configдля этой цели. Как это сделать в Android?

Тим Алмонд
источник

Ответы:

148

Многие приложения могут предоставлять способ фиксировать предпочтения пользователя относительно настроек конкретного приложения или действия. Для поддержки этого 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 = PreferenceManager.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 на сайте разработчиков.

Pentium10
источник
1
Спасибо. Похоже, мне нужно использовать XML-файл для того, что мне нужно (или, может быть, я использую XML в качестве данных для начальной загрузки), но предпочтения полезны для другой части моего проекта.
Тим Алмонд
1
Вы можете использовать файл xml для инициализации. Вам нужно позвонить примерно такPreferenceManager.setDefaultValues(this, R.xml.profiles_preferences, false);
Pentium10
3
Это руководство тоже может быть полезно: developer.android.com/guide/topics/ui/settings.html
Hung Tran
1
+1. Только один крошечный момент, о котором нужно помнить. После установки значения в preferencesобъекте editor.apply()рекомендуется вызвать вызов , editor.commit()поскольку первый будет обрабатывать сохранение в фоновом режиме.
Anindya Chatterjee
2
Я здесь немного запутался. SharedPreferences предназначен для хранения пользовательских настроек в приложении, а не настроек приложений. Пользователь (и я тоже) задавался вопросом, где хранить настройки приложения, например URL-адрес API или другие настройки, которые приложение использует для правильной работы.
Albanx