Compartir la base de datos SQLite entre 2 aplicaciones de Android?

Necesito compartir una sola base de datos entre 2 aplicaciones. Sé que la base de datos se creará en / data / data / MY_PACKAGE / databases /. Dado que los nombres de los paquetes son diferentes, ¿es posible definir la ruta a un nombre de paquete cuando creo la base de datos en cualquiera de las aplicaciones? Gracias.

Ciertamente puedes compartir una única base de datos entre 2 aplicaciones.

Para compartir datos entre aplicaciones (siempre que sean emitidas por el mismo editor), deberá especificar una identificación de usuario compartida en AndroidManifest.xml de ambas aplicaciones.

 

(No está documentado, pero la identificación de usuario compartida debe ser una cadena con al menos un separador de puntos)

El rest es fácil, y no necesita perder la ruta de la base de datos. Solo use el mismo DBAdapter en ambas aplicaciones. En la aplicación que aloja la base de datos, llame al DBAdapter con el contexto nativo.

 DBadapter hostDBAdapter = new DbAdapter(getApplicationContext()); performerDBadapter.open(); 

En la segunda aplicación, acceda a la base de datos con el contexto de la aplicación de alojamiento de bases de datos.
Primero, defina el contexto compartido:

 Context sharedContext = null; try { sharedContext = this.createPackageContext("replace.with.host.package.name", Context.CONTEXT_INCLUDE_CODE); if (sharedContext == null) { return; } } catch (Exception e) { String error = e.getMessage(); return; } 

Luego abra el DBAdapter con el contexto compartido:

 DbAdapter sharedDBadapter = new PerformerDbAdapter(sharedContext); sharedDBadapter.open(); 

Como nota final, si su base de datos existe antes de configurar el ID de usuario compartido en el manifiesto, deberá desinstalar / reinstalar las aplicaciones en un dispositivo físico, para evitar que se cierre de su base de datos (error 14 de sqlite). El emulador, por otro lado, podría ser más indulgente. En pocas palabras, si sus aplicaciones se publican en el mercado de Android, establecer una identificación de usuario compartida en el último momento no funcionará.

Espero que esto ayude.

La ruta de la base de datos es privada para cada aplicación y, por lo que yo sé, no es posible acceder directamente a ella en todas las aplicaciones.

Sin embargo, un enfoque es que una aplicación hace que su base de datos sea accesible para la otra usando ContentProvider . Echa un vistazo si eso funciona para ti.

Los proveedores de contenido almacenan y recuperan datos y lo hacen accesible para todas las aplicaciones. Son la única forma de compartir datos entre aplicaciones; no hay un área de almacenamiento común a la que puedan acceder todos los paquetes de Android.

Siempre que use el mismo certificado en ambas aplicaciones, sus aplicaciones se ejecutarán en el mismo proceso y se comportarán como si fueran la misma aplicación. Consulte esta sección de la documentación de Android http://developer.android.com/tools/publishing/app-signing.html #estrategias