2010-06-23 13 views
9

La mia applicazione Android ha due tipi di preferenze:Le preferenze dell'utente il file vs file delle preferenze App

1) Ho le preferenze dell'utente definito nella res/xml/preferences.xml modo che gli utenti possono gestire le loro preferenze con un PreferenceActivity .

2) Mi piacerebbe definire un altro file per le preferenze di configurazione globali della mia app.

Qual è il modo migliore per gestire le preferenze di configurazione dell'app? Dovrei creare un altro file XML con i valori di configurazione o dovrei specificare quei valori di configurazione in strings.xml? Qual è la migliore pratica per gestire le preferenze di configurazione?

risposta

6

file di preferenza non sono storead nel progetto /res/xml/defaults.xml

che vengono memorizzati sul dispositivo nella cartella dell'applicazione qualcosa come

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

Prova non specificare il nome del file, come avrete un po ' problemi con i file delle preferenze, come questo OP aveva in questa domanda: How do I get preferences to work in Android?

SharedPreferences preferences = PreferenceManager 
        .getDefaultSharedPreferences(context); 

Poi probabilmente si dovrà interrogare

preferences.getString('weightPref', null); 

Molte applicazioni possono fornire un modo per catturare le preferenze degli utenti delle impostazioni di una specifica applicazione o un'attività. Per supportare questo, Android fornisce un semplice set di API.

Le preferenze sono in genere coppie di valori nominali. Possono essere memorizzati come "Preferenze condivise" attraverso varie attività in un'applicazione (nota che al momento non può essere condivisa tra i processi). Oppure può essere qualcosa che deve essere memorizzato specifico per un'attività.

  1. Preferenze condivise: le preferenze condivise possono essere utilizzate da tutti i componenti (attività, servizi, ecc.) Dalle applicazioni.

  2. Preferenze di gestione attività: queste preferenze possono essere utilizzate solo con l'attività e non possono essere utilizzate da altri componenti dell'applicazione.

Preferenze condivise:

Le preferenze condivise sono gestite con l'aiuto di getSharedPreferences metodo della classe Context. Le preferenze sono memorizzate in un file predefinito (1) oppure è possibile specificare un nome file (2) da utilizzare per fare riferimento alle preferenze.

(1) Ecco come si ottiene l'istanza quando si specifica il nome del file

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

MODE_PRIVATE è la modalità operativa per le preferenze. È la modalità predefinita e significa che il file creato sarà accessibile solo dall'applicazione chiamante. Altre due modalità supportate sono MODE_WORLD_READABLE e MODE_WORLD_WRITEABLE.Nell'applicazione MODE_WORLD_READABLE un'altra applicazione può leggere il file creato ma non può modificarlo. Nel caso di MODE_WORLD_WRITEABLE, anche altre applicazioni dispongono di autorizzazioni di scrittura per il file creato.

(2) Il metodo consigliato è quello di utilizzare la modalità di default, senza specificare il nome del file

SharedPreferences preferences = PreferencesManager.getDefaultSharedPreferences(context); 

Infine, una volta che hai l'istanza preferenze, ecco come si può recuperare la stored valori dalle preferenze:

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

Per memorizzare i valori nel file delle preferenzeL'oggettodeve essere usato. Editor è l'interfaccia nidificata della classe SharedPreference.

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

Editor sostenere anche metodi come remove() e clear() per cancellare il valore di preferenza dal file.

Preferenze

attività:

Le preferenze condivise possono essere utilizzati da altri componenti dell'applicazione. Ma se non hai bisogno di condividere le preferenze con altri componenti e vuoi avere le attività preferenze private. Puoi farlo con l'aiuto del metodo getPreferences() dell'attività. Il metodo getPreference utilizza il metodo getSharedPreferences() con il nome della classe di attività per il nome file di preferenza.

seguito è il codice per ottenere preferenze

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

Il codice per memorizzare valori è anche lo stesso come nel caso delle preferenze condivise.

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

È inoltre possibile utilizzare altri metodi come la memorizzazione dello stato di attività nel database. Nota Android contiene anche un pacchetto chiamato android.preference. Il pacchetto definisce le classi per implementare l'interfaccia utente delle preferenze dell'applicazione.

Per vedere altri esempi, controllare il post di Android Data Storage sul sito degli sviluppatori.

+0

Si prega di [non utilizzare "qui" o "clicca qui" come testo del link] (http://www.w3.org/QA/Tips/noClickHere.html). Grazie! –

+0

Quello che voglio fare è definire un file xml di preferenze utente con valori predefiniti in res/xml/preferences.xml, come hai detto posso ottenere queste preferenze con: PreferenceManager.getDefaultSharedPreferences (context); Dall'altro lato voglio definire in un altro file un altro tipo di preferenze per la configurazione della mia app (gli utenti non possono gestire queste preferenze di configurazione, solo il codice della mia app sarà in grado di leggerle). La mia domanda è dove posso specificare i valori predefiniti per queste preferenze di configurazione, se ho già un file per le preferenze dell'utente (res/xml/preferences.xml). – whynot

+0

Joachim è un buon punto. Fisso. – MatrixFrog

1

Supponiamo che il vostro XML si legge come questo:

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

presumo si utilizza un PreferenceActivity per caricare le preferenze dal proprio xml. Quindi nella tua attività fai addPreferencesFromResource(R.xml.application_pref);

Quando si esegue questa operazione, per impostazione predefinita, tutti i valori sono memorizzati nel SharedPreference predefinito dell'applicazione. Puoi accedere a queste preferenze ovunque desideri. Così da qualche altra attività/servizio basta fare:

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

E proprio così si dovrebbe ottenere la preferenza dell'utente in value.

0

Probabilmente il modo migliore per impostare globali di configurazione preferenze per un app è quello di definire gli elementi meta-dati nel Manifesto Android