Những gì tôi đã làm và dường như hoạt động cho Hexaddicus, có cả phiên bản Lite và Pro chạy với cùng một người dùng và sau đó chạy lần đầu tiên của phiên bản Pro, sao chép cơ sở dữ liệu Lite. Sau đó thông báo cho người dùng bản sao.
Đặt android:sharedUserId
là như nhau trong cả hai sản phẩm ...
<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">
Và sau đó mã để sao chép các 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");
}
}
Nhược điểm duy nhất của việc này là một lần bản sao được thực hiện, không có đồng bộ hóa giữa hai phiên bản. Bạn cũng phải đảm bảo rằng người dùng phiên bản Lite đang chạy phiên bản đang chạy dưới dạng sharedUserId
hoặc bản sao sẽ không thành công.
Cập nhật: hãy xem xét ChrisCashwells nhận xét và câu trả lời quá kể từ khi anh ấy đưa ra một điểm hợp lệ và tôi không thể nhớ những gì tôi đã làm trong ví dụ của anh ấy.
Nguồn
2012-01-20 13:08:38
này dường như là một bản sao của http://stackoverflow.com/questions/7053809/share-sqlite-database -giữa-2-android-ứng dụng, nơi có một câu trả lời (thứ hai xuống). –
@EdJellard Tôi không tin đó là một bản sao.Trong khi các câu hỏi là _similar_, chúng khác nhau. Câu hỏi đó là hỏi về việc chia sẻ DB giữa hai ứng dụng, không nhất thiết phải là hai phiên bản của ứng dụng _same_. –
Cảm ơn bạn tôi sẽ xem xét. –