Android: Cómo eliminar preferencias compartidas en otro paquete
En mi aplicación de Android codé para leer datos compartidos de otra aplicación de Android y luego para eliminar los datos de las preferencias compartidas. Mi código de la siguiente manera:
try { con = createPackageContext("com.testapp.ws", 0); SharedPreferences pref = con.getSharedPreferences("demopref", Context.MODE_PRIVATE); ipAdr = pref.getString("demostring", "No Value"); pref.edit().remove("demopref").commit(); }
Esto muestra error siguiente:
- ACTION_SCREEN_ON y ACTION_SCREEN_OFF no funcionan?
- Emulador de Android 5.0 no se inicia
- Navegador web de Android SDK
- El emulador de Android ya no empieza
- ¿Habilitar el registro interno en el emulador de Android WebKit?
06-12 11:52:07.400: E/ApplicationContext(3587): Couldn't rename file /data/data/com.testapp.ws/shared_prefs/demopref.xml to backup file /data/data/com.testapp.ws/shared_prefs/demopref.xml.bak
He utilizado este método en mi otra aplicación para hacer datos compartidos
public void shareData(){ String strShareValue = ip; SharedPreferences prefs = getSharedPreferences("demopref",Context.MODE_WORLD_READABLE); SharedPreferences.Editor editor = prefs.edit(); editor.putString("demostring", strShareValue); editor.commit(); }
Cómo puedo hacer eso ? ¿Hay algo para agregar el archivo de manifiesto?
¡Gracias!
- Emulador no se ejecuta
- Fuerza de la señal del emulador de Android
- Android Descomprimir archivos Programáticamente en android
- ¿Debo preocuparme acerca de los mensajes de registro de consola de DDMS "No se puede enlazar a nnnn local para depurador"?
- Google Play instalado en Genymotion no se inicia
- Android: Emulador no puede comenzar con la resolución FullHD que se está estableciendo
- Mi aplicación está instalada en el emulador, pero no se inicia automáticamente
- ¿Cómo acceder a recurso con nombre dinámico en mi caso?
Si utiliza android: sharedUserId en sus archivos de manifiesto debería funcionar. Este es un problema de permisos que he estado corriendo en mí mismo.
Para ello, sólo tiene que agregar una etiqueta como android:sharedUserId="com.example.you"
a su etiqueta <manifest>
en su archivo AndroidManifest.xml
para sus dos aplicaciones (y la com.example.you
tiene Para ser el mismo en ambas aplicaciones, por supuesto).
Ejemplo de inicio del archivo de manifiesto:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="package.name" android:versionCode="1" android:versionName="1.0" android:sharedUserId="com.example.you" > ...
Para una descripción detallada de la forma de obtener este trabajo, vea mi respuesta sobre ¿Cómo puedo compartir un archivo SharedPreferences en dos aplicaciones diferentes de Android?
MODE_WORLD_READABLE
utilizar MODE_WORLD_READABLE
lugar de MODE_PRIVATE
. Lea los documentos para más información.
Aquí hay un tutorial para comprobar más si tienes más errores.
Mientras que las otras soluciones funcionarán técnicamente en la mayoría de las circunstancias, el framework que Android le ha proporcionado para compartir datos entre procesos / aplicaciones es ContentProvider
. Puede parecer una gran cantidad de abstracción extra, pero es la que está garantizada para trabajar.
Mientras que la interfaz para este componente refleja las llamadas en una base de datos, la estructura de datos subyacente puede ser cualquier cosa que te guste. En concreto, puede devolver un MatrixCursor
en respuesta a las consultas que proporcionan el contenido de su objeto SharedPreferences
y puede implementar un esquema URI para las llamadas de eliminación o actualización que se pueden utilizar para modificar las preferencias de otras aplicaciones.
Aquí hay un enlace a una entrada de blog de otro desarrollador que usó MatrixCursor
para compartir preferencias.
HTH
He estado luchando con SharedPreferences los últimos tres días, pero creo que finalmente lo resolví por mí mismo. Aquí hay algunos consejos y sugerencias que debería probar que podrían ayudarle (y un montón de otros usuarios de stackoverflow).
Tenga en cuenta que todas mis observaciones son para ICS (4.0.2 y 4.0.4).
- Si cambia el
android:sharedUserId
, elimine la aplicación porque los permisos de archivo / carpeta serán incorrectos. Por lo tanto, no debería cambiar ese valor si ya ha liberado la aplicación. - Si cambia los valores de
Context.MODE_*
, elimine los datos de la aplicación (o toda la aplicación) para garantizar que los permisos de archivo no son incorrectos. - Si utiliza
android:sharedUserId
, asegúrese de firmar las aplicaciones con el mismo certificado . - Utilice un nombre de archivo diferente para las preferencias en las dos aplicaciones. Tuve problemas con la aplicación simplemente leyendo las preferencias locales compartidas aunque usé
createPackageContex()
.
Esto es lo que funcionó para mí al final:
- Utilicé el mismo
android:sharedUserId
para las dos aplicaciones. (No es el mismoandroid:process
.) - Utilicé
Context.MODE_WORLD_READABLE
tanto para leer y escribir prefs locales, como para leer los prefs de la otra aplicación. - Utilicé
Context.CONTEXT_IGNORE_SECURITY
al llamar acreatePackageContext()
.
- Buscando un AR con biblioteca de reconocimiento de imágenes
- Cómo administrar el estado de la aplicación en Android (para el desarrollador de iPhone)