No se puede hacer que BackupAgent funcione cuando se reinstala desde Android Market

He implementado el BackupAgentHelper de acuerdo con la documentación, incluida la compatibilidad con versiones anteriores para 1.6, para hacer una copia de seguridad de todos mis SharedPreferences. Funciona bien cuando lo pruebo en el emulador Android 2.2 y cuando se ejecuta en mi dispositivo, que ejecuta Android 2.3.3, a través de USB. En estos dos casos de prueba, emito: adb shell bmgr run, que activa la copia de seguridad.

Sin embargo, al reinstalar mi aplicación desde Android Market, todos SharedPreferences se fueron. La documentación dice después de eso dataChanged() "El Administrador de copias de seguridad llama al método onBackup () de su agente de copias de seguridad en un momento oportuno en el futuro". Bien, pero ¿alguien sabe qué hace que el sistema realmente haga la copia de seguridad? Sospecho que esto no está sucediendo en mi caso.

La documentación dice: "Si usa un dispositivo, abra la Configuración del sistema, seleccione Privacidad, luego habilite Copia de seguridad de mis datos y Restauración automática". pero esa opción no está presente en mi dispositivo (SE Xperia Mini). Solo puedo suponer que esta opción siempre está habilitada y no se puede desactivar. Estoy usando Telia en Suecia como mi operador (si eso importa).

¿Alguien tiene alguna idea de por qué la copia de seguridad no funciona cuando se reinstala desde Market pero funciona completamente cuando se usa el emulador y en el dispositivo a través de USB?

preguntado el 30 de agosto de 11 a las 23:08

Creo que la ausencia de la opción en realidad indica lo contrario: la copia de seguridad no es compatible. En mi HTC Desire, la ROM oficial no muestra la opción de copia de seguridad (y la copia de seguridad no funciona) pero con Cyanogenmod veo la opción. -

2 Respuestas

La configuración de copia de seguridad y restauración en la configuración de privacidad es específica del proveedor. Vea este fragmento de código tomado del Clase de privacidad:

    // Vendor specific
    if (getPackageManager().resolveContentProvider(GSETTINGS_PROVIDER, 0) == null) {
        screen.removePreference(findPreference(BACKUP_CATEGORY));
    }

Sony Ericsson reemplazó la declaración condicional con su contenido y elimina esta Preferencia incondicionalmente.

Este código está cubierto por Licencia Apache, por lo tanto, SE no necesita proporcionarle el código fuente. Si vive en un país, donde la ingeniería inversa para este propósito es legal, creo (no soy abogado) puede:

  1. Extraiga el paquete de configuración de su dispositivo:

    adb pull /system/app/Settings.apk Settings.apk
    
  2. Decodificar settings.apk usando apktool:

    apktool d -s Settings.apk
    
  3. En recién creado Ajustes directorio encontrará classes.dex. Para descompilarlo usando Smali (se puede encontrar en code.google.com):

    baksmali classes.dex -o classes
    
  4. Finalmente estás interesado en clases / com / android / settings / PrivacySettings.smali

Puede hacer lo mismo con Settings.apk tomado de Android Emulator y comparar estos dos archivos.

He Xperia mini pro (SK17i) también y esa preferencia tampoco existe.

Respondido 14 Oct 11, 09:10

Mi intento anterior de probar la funcionalidad al usar Market fue hacerlo todo en una secuencia (¿relativamente rápida?). Incluso reinicié mi teléfono después de cambiar algunos parámetros en SharedPreferences y luego desinstalé mi aplicación, pensando que un apagado desencadenaría acciones de sincronización de respaldo pendientes. Desafortunadamente, eso no activó la sincronización con los servidores de respaldo y se perdieron las SharedPreferences.

Ahora a la parte buena e informativa. Cambié algunas SharedPreferences y dejé el teléfono en funcionamiento durante un par de horas antes de desinstalar mi aplicación. La próxima vez que lo instalé desde Market, las SharedPreferences se restauraron desde la copia de seguridad en la nube. Así que la solución fue simplemente hacer que ocurriera el "momento oportuno en el futuro". No me gusta el comportamiento, pero puedo aceptarlo, ya que me doy cuenta de que no se puede sincronizar con los servidores cada vez que se llama a dataChanged ().

Al menos ahora sabemos que incluso si la opción "Copia de seguridad de mis datos y restauración automática" en Privacidad no está presente en su dispositivo, seguirá haciendo la copia de seguridad utilizando BackupAgent. Solo necesita algo de tiempo (una cantidad indefinida de) para hacerlo.

Respondido 31 ago 11, 16:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.