2010-06-23 18 views
9

Meine Android-Anwendung hat zwei Arten von Vorlieben:Benutzereinstellungen Datei vs App Voreinstellungsdatei

1) Ich habe Vorlieben Benutzer in res/xml/preferences.xml definiert, so dass Benutzer ihre Einstellungen mit einem PreferenceActivity verwalten .

2) Ich würde gerne eine andere Datei für globale Konfiguration Einstellungen meiner App definieren.

Wie kann ich meine App-Konfigurationseinstellungen am besten verwalten? Sollte ich eine andere XML-Datei mit Konfigurationswerten erstellen oder sollte ich diese Konfigurationswerte in strings.xml angeben? Was ist die beste Vorgehensweise zum Verwalten von Konfigurationseinstellungen?

Antwort

6

Preference-Dateien sind nicht storead in Projekt /res/xml/defaults.xml

Sie auf dem Gerät in Ihrer Bewerbungsmappe so etwas wie

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

gespeichert sind, versuchen Sie den Dateinamen nicht gebe, wie Sie einige haben Probleme mit den Einstellungsdateien, wie diese OP hatte in dieser Frage: How do I get preferences to work in Android?

SharedPreferences preferences = PreferenceManager 
        .getDefaultSharedPreferences(context); 

Dann werden Sie wahrscheinlich

preferences.getString('weightPref', null); 

Viele Anwendungen bieten kann eine Art und Weise Benutzereinstellungen auf die Einstellungen einer bestimmten Anwendung oder einer Aktivität zu erfassen abzufragen haben. Um dies zu unterstützen, bietet Android eine Reihe von APIs.

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

  1. Gemeinsame Einstellungen: Die gemeinsamen Einstellungen können von allen Anwendungen (Aktivitäten, Dienste usw.) aus den Anwendungen verwendet werden.

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

Gemeinsame Vorlieben:

Die gemeinsamen Einstellungen werden mit Hilfe von getSharedPreferences Methode der Context Klasse verwaltet. Die Voreinstellungen werden in einer Standarddatei (1) gespeichert, oder Sie können einen Dateinamen (2) angeben, der verwendet werden soll, um auf die Voreinstellungen Bezug zu nehmen.

(1) Hier ist, wie Sie die Instanz erhalten, wenn Sie den Dateinamen angeben

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

MODE_PRIVATE ist die Betriebsart für die Einstellungen. Dies ist der Standardmodus und bedeutet, dass auf die erstellte Datei nur von der aufrufenden Anwendung zugegriffen wird. Andere unterstützte Modi sind MODE_WORLD_READABLE und MODE_WORLD_WRITEABLE.In MODE_WORLD_READABLE kann eine andere Anwendung die erstellte Datei lesen, aber nicht ändern. Im Fall von MODE_WORLD_WRITEABLE haben andere Anwendungen auch Schreibberechtigungen für die erstellte Datei.

(2) Der empfohlene Weg ist durch den Standard-Modus zu verwenden, ohne die Dateinamen

SharedPreferences preferences = PreferencesManager.getDefaultSharedPreferences(context); 

Schließlich zu spezifizieren, sobald Sie die Einstellungen Instanz haben, ist hier, wie Sie die gespeicherte abrufen Werte von den Vorlieben:

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

Um store in der Voreinstellungsdatei Werte SharedPreference.Editor Objekt muss verwendet werden. Editor ist die verschachtelte Schnittstelle der Klasse SharedPreference.

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

Editor auch Methoden unterstützen wie remove() und clear() den Präferenzwert aus der Datei zu löschen.

Aktivität Vorlieben:

Die gemeinsamen Präferenzen können durch andere Anwendungskomponenten verwendet werden. Aber wenn Sie die Voreinstellungen nicht mit anderen Komponenten teilen müssen und möchten, dass Aktivitäten private Präferenzen haben. Sie können dies mit Hilfe der Methode getPreferences() der Aktivität tun. Die Methode getPreference verwendet die Methode getSharedPreferences() mit dem Namen der Aktivitätsklasse für den Namen der Voreinstellungsdatei.

Im Folgenden finden Sie den Code Vorlieben zu bekommen

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

Die Codewerte zu speichern, ist auch bei gemeinsamen Vorlieben gleich.

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 wie Speichern des Aktivitätsstatus in der Datenbank verwenden. Hinweis: Android enthält auch ein Paket mit der Bezeichnung android.preference. Das Paket definiert Klassen zum Implementieren von UI für Anwendungseinstellungen.

Um einige weitere Beispiele zu sehen, überprüfen Android Data Storage Post auf der Entwickler-Website.

+0

Bitte [verwenden Sie nicht „hier“ oder „hier klicken“ als Link-Text] zu definieren, (http://www.w3.org/QA/Tips/noClickHere.html). Vielen Dank! –

+0

Was ich tun möchte, ist für eine Seite eine XML-Datei für Benutzereinstellungen mit Standardwerten in res/xml/preferences.xml zu definieren, wie Sie bereits erwähnt haben: PreferenceManager.getDefaultSharedPreferences (context); Auf der anderen Seite möchte ich in einer anderen Datei eine andere Art von Einstellungen für die Konfiguration meiner App definieren (Benutzer können diese Konfigurationseinstellungen nicht verwalten, nur der Code meiner App kann sie lesen). Meine Frage ist, wo kann ich die Standardwerte für diese Konfigurationseinstellungen angeben, wenn ich bereits eine Datei für Benutzereinstellungen (res/xml/preferences.xml) habe. – whynot

+0

Joachim macht einen guten Punkt. Fest. – MatrixFrog

1

Nehmen wir an, Ihre xml wie folgt lautet:

<?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> 

Ich gehe davon aus, benutzen Sie einen PreferenceActivity die Einstellungen von Ihrem xml zu laden. In Ihrer Aktivität führen Sie also addPreferencesFromResource(R.xml.application_pref);

Wenn Sie dies tun, werden standardmäßig alle Werte in der Standard SharedPreference der Anwendung gespeichert. Sie können auf diese Einstellungen überall zugreifen. Also von einem anderen Aktivität/Service nur tun:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 
boolean value = prefs.getBoolean("gpsOn", false); 

Und genau wie, dass Sie die Vorliebe des Benutzers in value bekommen sollten.

0

wahrscheinlich der beste Weg globale Konfiguration Präferenzen für eine App zu setzen, ist Meta-Datenelemente im Android Manifest