2010-06-23 13 views
9

Mi aplicación para Android tiene dos tipos de preferencias:archivo de preferencias de usuario vs archivo de preferencias de la aplicación

1) Tengo preferencias del usuario definido en res/xml/preferences.xml modo que los usuarios pueden gestionar sus preferencias con un PreferenceActivity .

2) Me gustaría definir otro archivo para las preferencias de configuración globales de mi aplicación.

¿Cuál es la mejor forma de administrar las preferencias de configuración de mi aplicación? ¿Debería crear otro archivo XML con valores de configuración o debería especificar esos valores de configuración en strings.xml? ¿Cuál es la mejor práctica para administrar las preferencias de configuración?

Respuesta

6

archivos de preferencias se no storead en del proyecto /res/xml/defaults.xml

Se almacenan en el dispositivo en algo a su carpeta de aplicación como

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

Intenta no especifique el nombre del archivo, ya que tendrá alguna problemas con los archivos de preferencias, como este OP tenía en esta pregunta: How do I get preferences to work in Android?

SharedPreferences preferences = PreferenceManager 
        .getDefaultSharedPreferences(context); 

Entonces es probable que tenga que consultar

preferences.getString('weightPref', null); 

Muchas aplicaciones pueden proporcionar una manera de capturar las preferencias del usuario en la configuración de una aplicación específica o una actividad. Para apoyar esto, Android proporciona un conjunto simple de API.

Las preferencias son típicamente pares de valores de nombres. Se pueden almacenar como "Preferencias compartidas" en varias actividades de una aplicación (tenga en cuenta que actualmente no se puede compartir entre procesos). O puede ser algo que debe almacenarse específico de una actividad.

  1. Preferencias compartidas: las preferencias compartidas pueden ser utilizadas por todos los componentes (actividades, servicios, etc.) fuera de las aplicaciones.

  2. Preferencias de manejo de actividades: Estas preferencias solo se pueden utilizar en la actividad y no pueden ser utilizadas por otros componentes de la aplicación.

Preferencias compartidas:

Las preferencias compartidas son gestionados con la ayuda de getSharedPreferences método de la clase Context. Las preferencias se almacenan en un archivo predeterminado (1) o puede especificar un nombre de archivo (2) que se utilizará para referirse a las preferencias.

(1) Así es como se obtiene la instancia cuando se especifica el nombre del archivo

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

MODE_PRIVATE es el modo de funcionamiento de las preferencias. Es el modo predeterminado y significa que solo se accederá al archivo creado desde la aplicación de llamada. Otros dos modos admitidos son MODE_WORLD_READABLE y MODE_WORLD_WRITEABLE.En MODE_WORLD_READABLE, otra aplicación puede leer el archivo creado pero no puede modificarlo. En el caso de MODE_WORLD_WRITEABLE, otras aplicaciones también tienen permisos de escritura para el archivo creado.

(2) La forma recomendada es utilizar el modo por defecto, sin especificar el nombre del archivo

SharedPreferences preferences = PreferencesManager.getDefaultSharedPreferences(context); 

Por último, una vez que tenga la instancia preferencias, aquí es cómo se puede recuperar el almacenado valores de las preferencias:

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

Para almacenar valores en el archivo de preferencias SharedPreference.Editor objeto tiene que ser utilizado. Editor es la interfaz anidada de la clase SharedPreference.

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

Editor también apoyar los métodos como remove() y clear() para borrar el valor de preferencia a partir del archivo.

Preferencias

Actividad:

Las preferencias compartidas pueden ser utilizados por otros componentes de la aplicación. Pero si no necesita compartir las preferencias con otros componentes y desea tener actividades, preferencias privadas. Puede hacerlo con la ayuda del método getPreferences() de la actividad. El método getPreference utiliza el método getSharedPreferences() con el nombre de la clase de actividad para el nombre de archivo de preferencia.

siguiente es el código para obtener preferencias

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

El código para almacenar valores también es igual que en el caso de las preferencias compartidas.

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

También puede utilizar otros métodos como almacenar el estado de la actividad en la base de datos. Nota Android también contiene un paquete llamado android.preference. El paquete define clases para implementar la IU de preferencias de la aplicación.

Para ver algunos ejemplos más, consulte la publicación de Data Storage de Android en el sitio de desarrolladores.

+0

favor [no utilizan "aquí" o "haga clic aquí" como texto del enlace] (http://www.w3.org/QA/Tips/noClickHere.html). ¡Gracias! –

+0

Lo que quiero hacer es definir para un lado un archivo xml de preferencias del usuario con valores predeterminados en res/xml/preferences.xml, como mencionaste, puedo obtener estas preferencias con: PreferenceManager.getDefaultSharedPreferences (context); Por otro lado, quiero definir en otro archivo otro tipo de preferencias para configurar mi aplicación (los usuarios no pueden administrar estas preferencias de configuración, solo el código de mi aplicación podrá leerlas). Mi pregunta es dónde puedo especificar los valores predeterminados para estas preferencias de configuración, si ya tengo un archivo para las preferencias del usuario (res/xml/preferences.xml). – whynot

+0

Joachim hace un buen punto. Fijo. – MatrixFrog

1

Supongamos que el código XML se lee así:

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

Asumo que utiliza un PreferenceActivity para cargar las preferencias de su XML. Entonces en su actividad lo hace addPreferencesFromResource(R.xml.application_pref);

Al hacer esto, de manera predeterminada, todos los valores se almacenan en la SharedPreference predeterminada de la aplicación. Puede acceder a estas preferencias en cualquier lugar que desee. Así que de alguna otra actividad/servicio simplemente hacer:

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

y al igual que usted debe conseguir la preferencia del usuario en value.

0

Probablemente la mejor manera de establecer globales de configuración preferencias para una aplicación es definir elementos de metadatos en el manifiesto de Android

Cuestiones relacionadas