¿Cuál es la mejor manera de realizar la "configuración de la aplicación" en Android? [cerrado]

108

Me gustaría almacenar algunas configuraciones de la aplicación (como la URL de una API y algunas configuraciones para probar) para una aplicación de Android.

Principalmente trabajo como desarrollador .NET , por lo que estoy acostumbrado a usar el archivo app.configpara este propósito. ¿Cuál es una buena forma de hacerlo en Android?

Tim Almond
fuente

Respuestas:

148

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

Las preferencias suelen ser pares de nombre y valor. Se pueden almacenar como "Preferencias compartidas" en varias actividades en una aplicación (tenga en cuenta que actualmente no se pueden compartir entre procesos). O puede ser algo que deba almacenarse específicamente para una actividad.

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

  2. Preferencias gestionadas por la actividad: estas preferencias solo se pueden utilizar dentro de la actividad y no pueden ser utilizadas por otros componentes de la aplicación.

Preferencias compartidas:

Las preferencias compartidas se gestionan con la ayuda del getSharedPreferencesmétodo de la Contextclase. Las preferencias se almacenan en un archivo predeterminado (1) o puede especificar un nombre de archivo (2) que se utilizará para hacer referencia a las preferencias.

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

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

MODE_PRIVATEes el modo de funcionamiento de las preferencias. Es el modo predeterminado y significa que solo la aplicación que llama accederá al archivo creado. Otros dos modos admitidos son MODE_WORLD_READABLEy MODE_WORLD_WRITEABLE. En MODE_WORLD_READABLEotra aplicación puede leer el archivo creado pero no puede modificarlo. En el caso de MODE_WORLD_WRITEABLEotras aplicaciones, también tiene permisos de escritura para el archivo creado.

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

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);

Finalmente, una vez que tenga la instancia de preferencias, así es como puede recuperar los valores almacenados de las preferencias:

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

Para almacenar valores en el archivo de preferencias, SharedPreference.Editorse debe utilizar el objeto. Editores la interfaz anidada de la SharedPreferenceclase.

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

El editor también admite métodos como remove()y clear()para eliminar el valor de preferencia del archivo.

Preferencias de actividad:

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

A continuación se muestra 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 el mismo que en el caso de 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 interfaz de usuario de preferencias de la aplicación.

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

Pentium10
fuente
1
Gracias. Parece que lo que tengo que hacer es usar un archivo XML para lo que busco (o tal vez uso el XML como datos para cargar inicialmente), pero las preferencias son útiles para otra parte de mi proyecto.
Tim Almond
1
Puede utilizar el archivo xml para init. Necesitas llamar a algo comoPreferenceManager.setDefaultValues(this, R.xml.profiles_preferences, false);
Pentium10
3
Esta guía también podría ser útil: developer.android.com/guide/topics/ui/settings.html
Hung Tran
1
+1. Solo un poquito para tener en cuenta. Después de establecer el valor en el preferencesobjeto, editor.apply()se recomienda volver a llamar editor.commit()ya que el primero manejará el guardado en segundo plano.
Anindya Chatterjee
2
Estoy un poco confundido aquí. Las preferencias compartidas sirven para almacenar la configuración del usuario en la aplicación, no la configuración de la aplicación. El usuario (y yo también) nos preguntamos dónde almacenar la configuración de la aplicación, ex URL de la API u otras configuraciones que la aplicación usa para funcionar correctamente.
Albanx