2011-01-11 15 views
7

Implementé el Agente de copia de seguridad como se describe en Data Backup, registré una clave de API y declare el Agente de copia de seguridad en mi Manifiesto. El trabajo de la parte de respaldo está bastante bien, creo; Cuando corro adb shell bmgr run en la línea de comandos, el siguiente aparece en LogCat:BackupAgent: "no se puede restaurar el paquete ..."

01-11 22:23:09.002: DEBUG/PerformBackupThread(97): starting agent for backup of BackupRequest{app=ApplicationInfo{4547c5b8 com.meins.nightclock} full=false} 
01-11 22:23:09.002: DEBUG/BackupManagerService(97): awaiting agent for ApplicationInfo{4547c5b8 com.meins.nightclock} 
01-11 22:23:09.013: DEBUG/BackupManagerService(97): agentConnected pkg=com.meins.nightclock [email protected] 
01-11 22:23:09.032: DEBUG/BackupHelperDispatcher(9122): handling existing helper 'alarms' [email protected] 
01-11 22:23:09.032: DEBUG/BackupHelperDispatcher(9122): handling existing helper 'prefs' [email protected] 
01-11 22:23:09.032: VERBOSE/LocalTransport(97): performBackup() pkg=com.meins.nightclock 
01-11 22:23:09.032: VERBOSE/LocalTransport(97): Got change set key=alarms:alarms size=16 key64=YWxhcm1zOmFsYXJtcw== 
01-11 22:23:09.042: VERBOSE/LocalTransport(97): data size 16 
01-11 22:23:09.062: VERBOSE/LocalTransport(97): Got change set key=prefs:com.meins.nightclock_preferences size=265 key64=cHJlZnM6Y29tLm1laW5zLm5pZ2h0Y2xvY2tfcHJlZmVyZW5jZXM= 
01-11 22:23:09.072: VERBOSE/LocalTransport(97): data size 265 
01-11 22:23:09.072: VERBOSE/LocalTransport(97): finishBackup() 

La restauración de una parte, por otra parte no funciona en absoluto, en onReceive() método no se llama. Cuando puedo volver a instalar mi aplicación, la única salida que puede (?) Se refieren a la BackupAgent es

01-11 22:14:01.042: DEBUG/vending(7426): [100] LocalAssetCache.updateOnePackage(): No local info for com.meins.nightclock 

Cuando corro adb shell bmgr restore com.meins.nightclock simplemente indica Unable to restore package com.meins.nightclock.


estoy usando la siguiente implementación de BackupAgentHelper

package com.meins.nightclock; 

import java.io.IOException; 

import android.app.backup.BackupAgentHelper; 
import android.app.backup.BackupDataInput; 
import android.app.backup.BackupDataOutput; 
import android.app.backup.FileBackupHelper; 
import android.app.backup.SharedPreferencesBackupHelper; 
import android.os.ParcelFileDescriptor; 
import android.util.Log; 

public class MyBackupAgent extends BackupAgentHelper { 

    public static final Object[] DATA_LOCK = new Object[0]; 

    private static final String PREFS_BACKUP_KEY = "prefs"; 
    private static final String ALARMS_BACKUP_KEY = "alarms"; 

    private DataLayerAlarms d; 

    @Override 
    public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data, 
      ParcelFileDescriptor newState) throws IOException { 

     if (d.backup() != 0) 
      return; 

     synchronized (DATA_LOCK) { 
      super.onBackup(oldState, data, newState); 
     } 
    } 

    @Override 
    public void onCreate() { 
     SharedPreferencesBackupHelper preferencesHelper = new SharedPreferencesBackupHelper(this, 
       getPackageName() + "_preferences"); 
     addHelper(PREFS_BACKUP_KEY, preferencesHelper); 

     FileBackupHelper fileHelper = new FileBackupHelper(this, DataLayerAlarms.BACKUP_FILE); 
     addHelper(ALARMS_BACKUP_KEY, fileHelper); 

     d = new DataLayerAlarms(this); 
    } 

    @Override 
    public void onRestore(BackupDataInput data, int appVersionCode, ParcelFileDescriptor newState) 
      throws IOException { 
     Log.d(toString(), "onRestore()"); 
     synchronized (DATA_LOCK) { 
      super.onRestore(data, appVersionCode, newState); 
     } 

     d.restore(); 
    } 

} 

En aras de la exhaustividad de la parte Manifiesto relevante:

<application 
    android:icon="@drawable/icon" 
    android:label="@string/app_name" 
    android:debuggable="true" 
    android:backupAgent="MyBackupAgent"> 
    <meta-data 
     android:name="com.google.android.backup.api_key" 
     android:value="AEdPqrEAAAAI4MsUOC-[...]" /> 

    ... 

</application> 

¿Alguien sabe por qué el BackupManager es incapaz de restaurar este paquete?

+0

Me sale lo mismo. Lo he visto funcionar, pero de repente ya no funciona. – slott

+1

Yo también. Estaba funcionando, y de repente dejó de funcionar. como wtf .. – coolcool1994

Respuesta

3

Trate de añadir un punto antes de que su nombre de la clase de copia de seguridad, como en:

android:backupAgent=".MyBackupAgent" 

O si la clase de copia de seguridad no está en su paquete raíz, añadir la ruta al mismo:

android:backupAgent=".package.MyBackupAgent" 
0

Cambiar android:backupAgent="MyBackupAgent" a android:backupAgent=".MyBackupAgent" funcionó para mí también.

+0

no funciona para mí – abh22ishek

0

Este problema ocurrió cuando cambié el nombre del paquete y luego aparecieron otros problemas. Me tomó un par de horas averiguarlo.

Deshabilitar la ejecución instantánea. Me estropeó las cosas.

Comprobar la lista de los medios de transporte, asegúrese de que Google se establece:

adb shell bmgr list transports 
    android/com.android.internal.backup.LocalTransport 
    * com.google.android.gms/.backup.BackupTransportService 

Asegúrese de que el nombre del paquete BackupAgentHelper y el nombre del paquete de meta-datos tienen el mismo nombre. El nombre de conflictos podría causar un problema.

androide: BackupAgent El nombre de la clase que implementan es agente de copia de seguridad de la aplicación , una subclase de BackupAgent. El valor de atributo debe ser un nombre de clase totalmente calificado (como, "com.example.project.MyBackupAgent"). Sin embargo, como una abreviatura, si el primer carácter del nombre es un punto (por ejemplo, ".MyBackupAgent"), se agrega al nombre del paquete especificado en el elemento . No hay un defecto El nombre debe ser especificado.

Cuestiones relacionadas