Ответ 1
То, что я сделал, и, похоже, работает для 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 и ответьте, так как он поднимает действительную точку, и я не могу вспомнить, что я сделал в его примере.