He estado desarrollando una aplicación de Android que interactúa con otras aplicaciones instaladas en el dispositivo a través de un archivo de preferencias compartidas.Preferencias compartidas de Android en diferentes aplicaciones
Este archivo se creó como MODE.WORLD_READABLE y cada aplicación instalada tiene su propio archivo con un nombre y una propiedad definidos comunes (lo que cambia es el valor de esa propiedad específica).
Por ejemplo, AppA y AppB deben tener cada uno un archivo compartido denominado "app_shared_file.xml" con una propiedad "property_shared_file".
Desde mi aplicación, quiero acceder primero a este archivo y leer el valor de la propiedad, y dependiendo de ese resultado quiero crear/actualizar el mío.
Sin embargo, tengo algunos problemas para lograrlo. En la documentación de Android veo que:
recuperar y almacenar el contenido de las preferencias de archivo 'nombre', volver a SharedPreferences a través del cual se puede recuperar y modificar sus valores. Solo se devuelve una instancia del objeto SharedPreferences a quienes llamen para el mismo nombre, lo que significa que verán las ediciones de los demás tan pronto como se realicen.
Después de leer el otro archivo de preferencias compartidas de la aplicación, cuando intento crear/actualizar el sistema, en lugar de editar el mío, utilizo el que he leído previamente. Si, por el contrario, empiezo por actualizar el mío y leo la otra aplicación más tarde, en lugar de leer la otra, la que se accede es mía.
¿Alguna idea?
El código que estoy usando para leer el pref es compartida [donde packageName es la otra aplicación pckg]:
Context con = context.createPackageContext(packageName, Context.CONTEXT_IGNORE_SECURITY);
SharedPreferences pref = con.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_WORLD_READABLE);
pref.getBoolean(SHARED_PREF_PROP, false);
El código que estoy usando para escribir en la aplicación compartida pref es:
SharedPreferences prefs= getSharedPreferences(SHARED_PREF_NAME, context.MODE_WORLD_READABLE);
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean(SHARED_PREF_PROP, value);
editor.commit();
Gracias de antemano.
Sí, hay dos aplicaciones diferentes y cada aplicación tiene su propio archivo de preferencias compartidas almacenado en su propia carpeta shared_prefs. Sí, conozco el nombre del paquete de la otra aplicación a través de PackageManager, pero no tengo la opción de saber qué actividad/clase lo manejará. Ya había visto ese enlace, el problema aquí es acceder a dos preferencias compartidas diferentes con el mismo nombre, la mía y la otra aplicación. Después de abrir uno, cuando intento abrir el otro, los puntos de referencia se abren inicialmente y no el que se envía como contexto. – user1683087