Lo que hice y parece funcionar para Hexaddicus, es tener versiones Lite y Pro ejecutadas como el mismo usuario y luego, en la primera ejecución de la versión Pro, copiar la base de datos Lite. Luego informe al usuario de la copia.
Establecer la android:sharedUserId
a ser la misma en ambos productos ...
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mycompany.package"
android:sharedUserId="com.mycompany.package" <---- IMPORTANT
android:versionCode="10"
android:versionName="@string/app_version"
android:installLocation="auto">
y luego el código para copiar el DB ...
try {
final Context free_context = this.createPackageContext("com.mycompany.package", Context.CONTEXT_INCLUDE_CODE);
final File full_db = this.getDatabasePath(GameData.DATABASE_NAME);
final File full_db_dir = full_db.getParentFile();
final File free_db = free_context.getDatabasePath(GameData.DATABASE_NAME);
final File free_db_dir = free_db.getParentFile();
if (free_db.exists() == false) return;
if (full_db_dir.exists() == false) full_db_dir.mkdir();
if (full_db.exists() == false) full_db.createNewFile();
FileUtils.copyDirectory(free_db_dir, full_db_dir);
this.gameData.getWritableDatabase();
}
catch (NameNotFoundException e) {
/* do nothing here since this is an semi expected case */
Log.w("mytag", "No Lite version found");
} catch (IOException e) {
Log.w("mytag", "Failed to create file");
}
}
La única desventaja de esto es que una vez la copia está hecha, no hay sincronización entre las dos versiones. También debe asegurarse de que el usuario de la versión Lite ejecute una versión que se esté ejecutando como sharedUserId
o la copia fallará.
Actualización: tenga en cuenta los comentarios de ChrisCashwells y responda también, ya que trae a colación un punto válido y no puedo recordar lo que hice en su ejemplo.
Esto parece ser un duplicado de http://stackoverflow.com/questions/7053809/share-sqlite-database -between-2-android-apps donde hay una respuesta (segunda abajo). –
@EdJellard No creo que sea un duplicado.Si bien las preguntas son similares, son diferentes. Esa pregunta es sobre compartir el DB entre dos aplicaciones, no necesariamente dos versiones de la aplicación _same_. –
Gracias, voy a echar un vistazo. –