Có một số dữ liệu trong ứng dụng Android mà tôi muốn sao lưu và khôi phục. Vì mục đích đó, tôi đã tạo triển khai tùy chỉnh BackupAgent
.onRestore không được gọi cho tùy chọn BackupAgent
Trong manifest của tôi trong tôi đã bao gồm các đại lý sao lưu như bạn có thể xem dưới đây
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:installLocation="auto"
package="com.myapp"
android:versionCode="14"
android:versionName="1.13" >
<application
android:backupAgent="com.myapp.MyBackupAgent">
<meta-data
android:name="com.google.android.backup.api_key"
android:value="my key" />
Tôi đã bao gồm phím api dịch vụ sao lưu, mặc dù tôi đang thử nghiệm với các giả lập (Android 2.2) và nó không nên cần thiết, bởi vì nó sử dụng phương tiện sao lưu cục bộ.
Để làm bài kiểm tra của các sao lưu và khôi phục Tôi đã làm như sau:
- Khởi động giả lập với cài đặt ứng dụng của tôi.
Enable sao lưu
adb shell bmgr phép đúng
Gọi một phần của mã của tôi là những phương pháp dataChanged trong lớp BackupManager được gọi.
Tiến hành bằng tay hoạt động sao lưu
adb shell bmgr chạy
Checked trong nhật ký rằng phương pháp onBackup của tùy chỉnh của tôi BackupAgent được gọi.
- Gỡ bỏ các ứng dụng
- Cài đặt lại ứng dụng
- Kiểm tra trong nhật ký nếu phương pháp onRestore được gọi.
Vấn đề là phương pháp onRestore dường như không được gọi và tôi không biết tại sao. Sau khi cài đặt lại ứng dụng hoặc kích hoạt khôi phục bằng tay với adb theo cách thủ công, tôi thấy những điều sau đây trong bảng điều khiển.
$adb shell bmgr restore com.myapp
restoreStarting: 2 packages
restoreFinished: 0
done
và điều này khác trong nhật ký
D/AndroidRuntime(8259):
D/AndroidRuntime(8259): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<
D/AndroidRuntime(8259): CheckJNI is ON
D/AndroidRuntime(8259): --- registering native functions ---
D/BackupManagerService( 59): MSG_RUN_RESTORE [email protected]
V/LocalTransport( 59): start restore 1
V/LocalTransport( 59): nextRestorePackage() = @[email protected]
V/LocalTransport( 59): getRestoreData() found 7 key files
V/LocalTransport( 59): ... key=com.android.providers.settings size=1208
V/LocalTransport( 59): ... key=com.myapp size=501
V/LocalTransport( 59): ... key=android size=1208
V/LocalTransport( 59): ... key=com.android.providers.userdictionary size=1208
V/LocalTransport( 59): ... key=com.android.browser size=1208
V/LocalTransport( 59): ... key=com.android.inputmethod.latin size=1208
V/LocalTransport( 59): ... [email protected]@ size=11
V/LocalTransport( 59): no more packages to restore
V/LocalTransport( 59): finishRestore()
V/LocalTransport( 59): finishRestore()
D/AndroidRuntime(8259): Shutting down VM
nhưng tôi không thấy rằng các cuộc gọi đến onRestore được thực sự thực hiện (Tôi có một số báo cáo khai thác gỗ chỉ vào đầu của nó?
Điều này có bao giờ xảy ra với bạn không? Có bất kỳ lý do gì bởi phương pháp onRestore không được gọi, ngay cả trong số onBackup
được gọi là?
Tôi vừa thử nó với một chiếc điện thoại thích hợp, một chiếc Samsung Galaxy Nexus. Tôi đã tự bảo đảm rằng tôi đã bật sao lưu, giống như được mô tả trong liên kết sau: http://support.verizonwireless.com/clc/devices/knowledge_base.html?id=51309 và tôi thấy điều này trong nhật ký 'W/BackupManagerService (196): Sao lưu vượt qua nhưng e = true p = false', có nghĩa là được bật nhưng không được cấp phép. Tại sao nó không được cung cấp? – mollymay
Tôi gặp vấn đề này ngay hôm nay. onBackup được gọi thành công mà không có ngoại lệ nhưng onRestore không được gọi khi ứng dụng được cài đặt lại. Bạn đã tìm ra lý do? Cảm ơn! – Loc