Archivo de preferencias del usuario vs Archivo de preferencias de la aplicación
Mi aplicación Android tiene dos tipos de preferencias:
1) Tengo las preferencias de usuario definidas en res / xml / preferences.xml para que los usuarios puedan administrar sus preferencias con una PreferenceActivity.
- Recursos de importación android de proyecto de biblioteca
- Botón con AMBOS color e imagen de fondo
- Collapsing ToolBar Layout siempre Colapsar si Mostrar PopUp Elemento de menú RecyclerView
- Aplicar diseño de material táctil ondulación a ImageButton?
- setting screenOrientation en AndroidManifest.xml no funciona
2) Me gustaría definir otro archivo para las preferencias de configuración global de mi aplicación.
¿Cuál es la mejor manera de administrar las preferencias de configuración de mi aplicación? ¿Debo crear otro archivo XML con valores de configuración o debo especificar los valores de configuración en strings.xml? ¿Cuál es la mejor práctica para administrar las preferencias de configuración?
- No se pueden obtener widgets de main.xml referenciados en el programa Java
- Se ha producido un error de análisis XML de Android Error inesperado
- El fondo del elemento de la lista está cambiando en el desplazamiento
- Android support-v7 CardView: La vista de texto de encabezado con otro color de fondo no se extiende hasta que los bordes
- Android: Edición de texto personalizado con XML
- ¿Cuándo usar getSharedPreferences vs savedInstanceState?
- Android: El mejor analizador para analizar datos XML
- Alineación de un TextView y ImageView dentro de un LinearLayout
Los archivos de preferencia no se almacenan en /res/xml/defaults.xml del proyecto
Se almacenan en el dispositivo en la carpeta de la aplicación algo así como
/data/data/com.your.pkg/default.prefs
Trate de no especificar el nombre del archivo, ya que tendrá algunos problemas con los archivos de preferencia, como este OP tenía en esta pregunta: ¿Cómo puedo obtener las preferencias para trabajar en Android?
SharedPreferences preferences = PreferenceManager .getDefaultSharedPreferences(context);
Entonces probablemente tendrá que consultar
preferences.getString('weightPref', null);
Muchas aplicaciones pueden proporcionar una forma de capturar las preferencias del usuario en los ajustes de una aplicación específica o de una actividad. Para apoyar esto, Android proporciona un conjunto simple de API.
Las preferencias son típicamente pares de valores de nombre. Pueden almacenarse 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 necesita ser almacenado específico para una actividad.
-
Preferencias compartidas: las preferencias compartidas pueden ser utilizadas por todos los componentes (actividades, servicios, etc.) de las aplicaciones.
-
Preferencias manejadas por la actividad: Estas preferencias sólo se pueden utilizar con en 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 método getSharedPreferences
de la clase Context
. Las preferencias se almacenan en un archivo predeterminado (1) o se puede especificar un nombre de archivo (2) que se utilizará para referirse a las preferencias.
(1) Aquí se muestra cómo 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 sólo se accederá al archivo creado por la aplicación que llama. Los 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 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 predeterminado, sin especificar el nombre del archivo
SharedPreferences preferences = PreferencesManager.getDefaultSharedPreferences(context);
Finalmente, una vez que tenga la instancia de preferencias, aquí es cómo puede recuperar los valores almacenados de las preferencias:
int storedPreference = preferences.getInt("storedInt", 0);
Para almacenar valores en el archivo de preferencia se debe utilizar el objeto SharedPreference.Editor
. 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 soporta 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 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 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 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 actividad en la base de datos. Nota Android también contiene un paquete llamado android.preference
. El paquete define las clases para implementar la interfaz de usuario de las preferencias de aplicación.
Para ver algunos ejemplos más compruebe la publicación Almacenamiento de datos de Android en el sitio de desarrolladores.
Supongamos que su xml dice 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>
Supongo que usted utiliza una PreferenceActivity
para cargar las preferencias de su xml. Así que en su actividad usted hace addPreferencesFromResource(R.xml.application_pref);
Al hacer esto, de forma predeterminada, todos los valores se almacenan en la predeterminada SharedPreference de la aplicación. Puede acceder a estas preferencias en cualquier lugar que desee. Así que de alguna otra actividad / servicio sólo hacer:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); boolean value = prefs.getBoolean("gpsOn", false);
Y al igual que usted debe obtener la preferencia del usuario en el value
.
Probablemente la mejor manera de establecer las preferencias de configuración global para una aplicación es definir elementos de metadatos en el manifiesto de Android
- Imprima un archivo PDF en una impresora usando PrintWriter a través de una conexión de socket
- La animación no se inicia en los elementos ListView que están actualmente visibles