То, что я сделал и, похоже, работает для Hexaddicus, - это запуск версий Lite и Pro от одного пользователя, а затем при первом запуске версии Pro скопируйте базу данных Lite.Затем сообщите пользователю копии.
Установите одинаковые значения android:sharedUserId
в обоих продуктах ...
<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">
А затем код для копирования БД ...
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");
}
}
Единственным недостатком является то, что после завершения копирования синхронизация между двумя версиями отсутствует.Вы также должны убедиться, что пользователь версии Lite работает под версией sharedUserId
, иначе копирование не удастся.
Обновление: пожалуйста, примите во внимание комментарии и ответы ChrisCashwells, так какон выдвигает правильную точку зрения, и я не могу вспомнить, что я сделал в его примере.