私の Android アプリには、バックアップして復元したいデータがいくつかあります。その目的のために、のカスタム実装を作成しましたBackupAgent
。
以下に示すように、私のマニフェストにはバックアップエージェントが含まれています
<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" />
エミュレーター (Android 2.2) でテストしていますが、バックアップ サービス API キーを含めましたが、ローカル バックアップ トランスポートを使用するため必要ありません。
バックアップと復元のテストを行うために、次のことを行いました。
- アプリケーションがインストールされた状態でエミュレーターを起動します。
バックアップを有効にする
adb shell bmgr enable true
私のコードの一部を呼び出して、BackupManager クラスの dataChanged メソッドが呼び出されました。
バックアップ操作を手動で開始する
adb シェル bmgr 実行
カスタム BackupAgent の onBackup メソッドが呼び出されたことをログで確認しました。
- アプリをアンインストールする
- アプリを再インストールする
- onRestore メソッドが呼び出されたかどうかをログで確認します。
問題は、onRestore メソッドが呼び出されていないようで、その理由がわかりません。アプリを再インストールするか、adb を使用して手動で復元をトリガーすると、コンソールに次のように表示されます。
$adb shell bmgr restore com.myapp
restoreStarting: 2 packages
restoreFinished: 0
done
およびログ内のこの他の
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 observer=android.app.backup.IRestoreObserver$Stub$Proxy@450e16a8
V/LocalTransport( 59): start restore 1
V/LocalTransport( 59): nextRestorePackage() = @pm@
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): ... key=@meta@ size=11
V/LocalTransport( 59): no more packages to restore
V/LocalTransport( 59): finishRestore()
V/LocalTransport( 59): finishRestore()
D/AndroidRuntime( 8259): Shutting down VM
しかし、onRestore への呼び出しが実際に行われたことはわかりません (最初にいくつかのログ ステートメントがありますか?
これはあなたに起こったことがありますか?呼び出されたのに、onRestore メソッドが呼び出されないことによる理由はありますonBackup
か?