Was ist der beste Weg, um "Anwendungseinstellungen" in Android vorzunehmen? [geschlossen]

108

Ich möchte einige Anwendungseinstellungen (wie die URL einer API und einige Einstellungen zum Testen) für eine Android-Anwendung speichern.

Ich arbeite hauptsächlich als .NET- Entwickler, daher bin ich es gewohnt, die Datei app.configfür diesen Zweck zu verwenden. Was ist ein guter Weg, um es in Android zu tun?

Tim Almond
quelle

Antworten:

148

Viele Anwendungen bieten möglicherweise eine Möglichkeit, Benutzereinstellungen für die Einstellungen einer bestimmten Anwendung oder Aktivität zu erfassen. Um dies zu unterstützen, bietet Android einen einfachen Satz von APIs.

Einstellungen sind normalerweise Name-Wert-Paare. Sie können als "Freigegebene Einstellungen" für verschiedene Aktivitäten in einer Anwendung gespeichert werden (beachten Sie, dass sie derzeit nicht für mehrere Prozesse freigegeben werden können). Oder es kann etwas sein, das für eine Aktivität spezifisch gespeichert werden muss.

  1. Freigegebene Einstellungen: Die freigegebenen Einstellungen können von allen Komponenten (Aktivitäten, Dienste usw.) außerhalb der Anwendungen verwendet werden.

  2. Einstellungen für Aktivitäten: Diese Einstellungen können nur in der Aktivität verwendet werden und können nicht von anderen Komponenten der Anwendung verwendet werden.

Gemeinsame Einstellungen:

Die gemeinsamen Einstellungen werden mit Hilfe der getSharedPreferencesMethode der ContextKlasse verwaltet. Die Einstellungen werden in einer Standarddatei (1) gespeichert, oder Sie können einen Dateinamen (2) angeben, der zum Verweisen auf die Einstellungen verwendet werden soll.

(1) So erhalten Sie die Instanz, wenn Sie den Dateinamen angeben

public static final String PREF_FILE_NAME = "PrefFile";
   SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);

MODE_PRIVATEist die Betriebsart für die Einstellungen. Dies ist der Standardmodus und bedeutet, dass nur die aufrufende Anwendung auf die erstellte Datei zugreifen kann. Weitere zwei unterstützte Modi sind MODE_WORLD_READABLEund MODE_WORLD_WRITEABLE. In einer MODE_WORLD_READABLEanderen Anwendung kann die erstellte Datei gelesen, aber nicht geändert werden. Bei MODE_WORLD_WRITEABLEanderen Anwendungen haben Sie auch Schreibberechtigungen für die erstellte Datei.

(2) Die empfohlene Methode ist die Verwendung im Standardmodus ohne Angabe des Dateinamens

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);

Sobald Sie die Voreinstellungsinstanz haben, können Sie die gespeicherten Werte wie folgt aus den Voreinstellungen abrufen :

 int storedPreference = preferences.getInt("storedInt", 0);

Zum Speichern von Werten in der Voreinstellungsdatei muss ein SharedPreference.EditorObjekt verwendet werden. Editorist die verschachtelte Schnittstelle der SharedPreferenceKlasse.

SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

Der Editor unterstützt auch Methoden wie remove()und clear()zum Löschen des Voreinstellungswerts aus der Datei.

Aktivitätseinstellungen:

Die freigegebenen Einstellungen können von anderen Anwendungskomponenten verwendet werden. Wenn Sie die Einstellungen jedoch nicht mit anderen Komponenten teilen müssen und Aktivitäten private Einstellungen wünschen. Sie können dies mit Hilfe der getPreferences()Methode der Aktivität tun . Die getPreferenceMethode verwendet die getSharedPreferences()Methode mit dem Namen der Aktivitätsklasse für den Namen der Einstellungsdatei.

Im Folgenden finden Sie den Code zum Abrufen der Einstellungen

SharedPreferences preferences = getPreferences(MODE_PRIVATE);
int storedPreference = preferences.getInt("storedInt", 0);

Der Code zum Speichern von Werten ist auch der gleiche wie bei gemeinsamen Einstellungen.

SharedPreferences preferences = getPreference(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

Sie können auch andere Methoden verwenden, z. B. das Speichern des Aktivitätsstatus in der Datenbank. Hinweis Android enthält auch ein Paket namens android.preference. Das Paket definiert Klassen zum Implementieren der Benutzeroberfläche für Anwendungseinstellungen.

Weitere Beispiele finden Sie im Datenspeicherbeitrag von Android auf der Entwicklerseite.

Pentium10
quelle
1
Vielen Dank. Es sieht so aus, als müsste ich eine XML-Datei für das verwenden, wonach ich suche (oder ich verwende das XML als Daten zum anfänglichen Laden), aber die Einstellungen sind für einen anderen Teil meines Projekts nützlich.
Tim Almond
1
Sie können die XML-Datei für init verwenden. Sie müssen so etwas wiePreferenceManager.setDefaultValues(this, R.xml.profiles_preferences, false);
Pentium10
3
Diese Anleitung könnte auch nützlich sein: developer.android.com/guide/topics/ui/settings.html
Hung Tran
1
+1. Nur ein kleines bisschen zu beachten. Nach dem Festlegen des Werts im preferencesObjekt wird ein Aufruf editor.apply()empfohlen, editor.commit()da erstere das Speichern im Hintergrund übernimmt.
Anindya Chatterjee
2
Ich bin hier etwas verwirrt. Die sharedPreferences dienen zum Speichern von Benutzereinstellungen über die App, nicht über Apps-Einstellungen. Der Benutzer (und ich auch) haben sich gefragt, wo App-Einstellungen, Ex-API-URL oder andere Einstellungen gespeichert werden sollen, mit denen die App ordnungsgemäß funktioniert.
Albanx