Nella mia app Android ci sono alcuni dati che desidero eseguire il backup e il ripristino. A tale scopo ho creato un'implementazione personalizzata di BackupAgent
.onRestore non richiamato per il mio BackupAgent personalizzato
Nel mio manifesta hanno incluso l'agente di backup, come potete vedere qui sotto
<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" />
ho incluso la chiave API servizio di backup, anche se sto testando con l'emulatore (Android 2.2) e non dovrebbe essere necessario, perché utilizza il trasporto di backup locale.
Al fine di fare il test del backup e il ripristino ho fatto quanto segue:
- avviare l'emulatore con la mia domanda installata.
Attiva il backup di
adb shell BMGR abilitare vero
chiamata la parte del mio codice erano il metodo DataChanged nella classe BackupManager si chiama.
avviare manualmente l'operazione di backup
adb shell BMGR gestita
Controllato nel registro che il metodo onBackup di mia abitudine BackupAgent è stato chiamato.
- disinstallare l'applicazione
- Reinstallare l'applicazione
- Verificare nel registro se il metodo viene chiamato OnRestore.
Il fatto è che il metodo onRestore non sembra essere chiamato e non so perché. Dopo aver reinstallato l'app o attivato manualmente il ripristino con adb, vedo quanto segue nella console.
$adb shell bmgr restore com.myapp
restoreStarting: 2 packages
restoreFinished: 0
done
e quest'altro nel registro
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
ma non vedo che la chiamata a OnRestore è in realtà fatta (io ho alcune dichiarazioni di registrazione solo all'inizio di esso?
È mai successo a te? C'è un motivo per cui il metodo onRestore non viene chiamato, anche nel onBackup
è stato chiamato?
Ho appena provato con un telefono corretto, un Samsung Galaxy Nexus. Mi sono reso sicuro di avere il backup abilitato, così come è descritto nel seguente link: http://support.verizonwireless.com/clc/devices/knowledge_base.html?id=51309 e lo vedo nel registro 'W/BackupManagerService (196): Backup pass ma e = true p = false', che significa abilitato ma non predisposto. Perché non è fornito? – mollymay
Ho ricevuto questo problema oggi. onBackup chiamato con successo senza eccezioni, ma onRestore non viene chiamato quando l'app viene reinstallata. Hai scoperto il motivo? Grazie! – Loc