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:

 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!

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).

  1. 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.
  2. 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.
  3. Si utiliza android:sharedUserId , asegúrese de firmar las aplicaciones con el mismo certificado .
  4. 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:

  1. Utilicé el mismo android:sharedUserId para las dos aplicaciones. (No es el mismo android:process .)
  2. Utilicé Context.MODE_WORLD_READABLE tanto para leer y escribir prefs locales, como para leer los prefs de la otra aplicación.
  3. Utilicé Context.CONTEXT_IGNORE_SECURITY al llamar a createPackageContext() .
  • Cómo cambiar el directorio temporal del emulador de Android
  • Cómo simular el modo de suspensión en el emulador de Android
  • Error de "aplicación no instalada" en Android
  • Cómo copiar imágenes a la tarjeta sd de emulador de Android desde el disco duro?
  • La simulación de ubicación del emulador no funciona
  • El emulador de Android no pudo asignar memoria 8
  • Emulación Samsung Galaxy S2
  • Emulador no muestra mi aplicación
  • Emulador de Android - Problemas para crear cuentas de usuario
  • Error en el navegador del emulador de Android
  • MockLocation testProvider no llama a onLocationChanged
  • Interesting Posts
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.