traducir studio secure google gms fullbackupcontent developer data allowbackup android backup sharedpreferences android-backup-service

android - studio - BackupManager no llama el transporte de copia de seguridad



com android backup apk (3)

1) Coloque Log.i () en su onCreate, para ver si se llama.

2) Logcat indica que su función no escribió nada. Compruebe si tiene el archivo shared_prefs / SCORES en la carpeta privada de su aplicación (asume que usa el administrador de archivos apropiado en el dispositivo rooteado). Este es el archivo que está intentando tener en copia de seguridad. Probablemente su archivo de preferencias sea algo más que este archivo, en tal caso, corrija sus SCORS de puntuación para reflejar el archivo de preferencias real.

3) Traté de depurar BackupAgentHelper.onCreate en mi aplicación, y se puede depurar después de invocar adb shell bmgt ... por lo que es posible pasar al depurador aquí.

Bien, entonces estoy tratando de implementar Data Backup en mi aplicación, y he estado siguiendo esta guía . He implementado mi BackupAgentHelper usando un SharedPreferencesBackupHelper . No obtengo ningún error y estoy seguro de llamar a dataChanged() después de todos los cambios de preferencia, pero cuando pruebo la copia de seguridad (`adb shell bmgr run) obtengo esta información en LogCat:

07-07 12:29:00.258: V/BackupManagerService(291): Scheduling immediate backup pass 07-07 12:29:00.258: V/BackupManagerService(291): Running a backup pass 07-07 12:29:00.258: V/BackupManagerService(291): clearing pending backups 07-07 12:29:00.258: V/PerformBackupTask(291): Beginning backup of 1 targets 07-07 12:29:00.289: V/BackupServiceBinder(291): doBackup() invoked 07-07 12:29:00.289: D/PerformBackupTask(291): invokeAgentForBackup on @pm@ 07-07 12:29:00.297: I/PerformBackupTask(291): no backup data written; not calling transport

Así que para referencia, en mi manifiesto he añadido:

<application android:allowBackup="true" android:backupAgent="com.kcoppock.sudoku.SudokuBackupAgent"

tanto como

<meta-data android:name="com.google.android.backup.api_key" android:value="my_key_goes_here" />

y mi BackupAgentHelper se implementa así:

public class SudokuBackupAgent extends BackupAgentHelper { static final String SCORES = "SCORES"; static final String BACKUP_ID = "sudoku_backup"; @Override public void onCreate() { SharedPreferencesBackupHelper backupHelper = new SharedPreferencesBackupHelper(this, SCORES); addHelper(BACKUP_ID, backupHelper); } }

y finalmente, en mi actividad principal, pido una copia de seguridad de datos como esta:

edit.putString(id + "_values", valueCache.toString()); edit.putString(id + "_hints", hintCache.toString()); edit.commit(); BackupManager backup = new BackupManager(this); backup.dataChanged();

He intentado la depuración y parece que nunca se llama a mi onCreate() en SudokuBackupAgent . O al menos nunca se ha alcanzado desde el depurador. Parece que no está encontrando ningún dato actualizado, y he verificado dos veces para ASEGURAR que hay datos para hacer una copia de seguridad. ¿Hay algo que me estoy perdiendo aquí?

EDITAR : Debería agregar, estoy probando en un dispositivo (Galaxy Nexus), e incluso he intentado usar una versión de lanzamiento exportada para propósitos de prueba.


Si no cambia los datos de preferencias, solo realizará una copia de seguridad una vez, pero no posteriormente.

https://developer.android.com/reference/android/app/backup/SharedPreferencesBackupHelper.html

"Cada vez que se realiza una copia de seguridad, realizará una copia de seguridad de todas las preferencias compartidas con nombre que hayan cambiado desde la última operación de copia de seguridad".

Como dijo el otro póster, asegúrese de tener una declaración de registro en su onCreate.

Puede forzar una copia de seguridad por:

// bmgr wipe TRANSPORT PACKAGE bmgr wipe com.google.android.backup/.BackupTransportService com.kcoppock.sudoku bmgr run

El valor predeterminado es com.google.android.backup/.BackupTransportService , pero es mejor verificarlo con los bmgr list transports .

Será mucho más feliz correr contra el transporte local, no el transporte de Google predeterminado. Compruebe los documentos dev sobre esto.


Tuve el mismo problema hoy con Android SDK 4.1. Usar versiones 2.3.3, sin embargo, ayudó a:

07-15 13:59:56.459: V/LocalTransport(61): performBackup() pkg=com........ 07-15 13:59:56.469: V/LocalTransport(61): Got change set key=filehelper:../databases/database.db size=8208 key64=ZmlsZWhlbHBlcjouLi8kYXRhYmFzZXMvZXhwZW5zZXIuZGI= 07-15 13:59:56.469: V/LocalTransport(61): data size 8208 07-15 13:59:56.469: V/LocalTransport(61): finishBackup()