Hay algunos datos en mi aplicación de Android que me gustaría hacer una copia de seguridad y restaurar. Para tal fin, he creado una implementación personalizada de BackupAgent
.onRestore no invocado para mi BackupAgent personalizado
En mi manifiesta en haber incluido el agente de copia de seguridad como se puede ver a continuación
<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" />
He incluido la clave API del servicio de copia de seguridad, a pesar de que estoy probando con el emulador (Android 2.2) y que no debería ser necesario, porque utiliza el transporte de copia de seguridad local.
Con el fin de hacer la prueba de la copia de seguridad y restaurar he hecho lo siguiente:
- iniciar el emulador instalado con mi solicitud.
Activar respaldo
adb shell BMGR permiten cierto
de llamadas por parte de mi código eran el método DataChanged en la clase BackupManager se llama.
iniciar manualmente la operación de copia de seguridad
adb shell BMGR ejecutar
registramos en el registro que el método onBackup de mi costumbre BackupAgent fue llamado.
- desinstalar la aplicación
- Vuelva a instalar la aplicación
- Comprobar en el registro si se llama al método OnRestore.
El hecho es que el método onRestore no parece ser llamado y no sé por qué. Después de volver a instalar la aplicación o activar manualmente la restauración con adb, veo lo siguiente en la consola.
$adb shell bmgr restore com.myapp
restoreStarting: 2 packages
restoreFinished: 0
done
y este otro en el registro de
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
pero no veo que la llamada a OnRestore hecho realmente (tengo algunas declaraciones de registro justo en el comienzo de la misma?
¿Alguna vez le ha pasado esto? ¿Hay alguna razón por la que no se llama el método onRestore, incluso en el onBackup
se llamó?
Lo probé con un teléfono adecuado también, un Samsung Galaxy Nexus. Me aseguré de tener habilitada la copia de seguridad, tal como se describe en el siguiente enlace: http://support.verizonwireless.com/clc/devices/knowledge_base.html?id=51309 y veo esto en el registro 'W/BackupManagerService (196): pase de respaldo, pero e = verdadero p = falso', lo que significa que está habilitado pero no aprovisionado. ¿Por qué no está aprovisionado? – mollymay
Tengo este problema hoy. onBackup llamado con éxito sin excepción pero onRestore no se llamó cuando se volvió a instalar la aplicación. ¿Has descubierto el motivo? ¡Gracias! – Loc