2015-04-13 4 views
3

Я пытаюсь реализовать пользовательский backupAgentHelper для резервного копирования файла базы данных моего приложения. Я просмотрел документы несколько раз, но всякий раз, когда я пытаюсь создать резервную копию, backupAgentHelper на Create/onBackup/onRestore никогда не вызывается.Android BackupAgent никогда не назывался

манифеста имеет следующие применения: при

android:allowBackup="true" 
android:backupAgent="myBackupHelper" 
android:restoreAnyVersion="true" 

и метаданных

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

myBackupHelper:

public class myBackupHelper extends BackupAgentHelper{ 

public static String DATABASE_NAME = "db.dat"; 

@Override 
public void onCreate(){ 
    log.d("Backup oncreate called"); 
    FileBackupHelper hosts = new FileBackupHelper(this, this.getExternalFilesDir(DATABASE_NAME).getAbsolutePath()); 
    addHelper(DATABASE_NAME,hosts); 
} 

@Override 
public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data, ParcelFileDescriptor newState) { 
    log.d("backup onbackup called"); 
    try { 
     //class is the lock since we are using static synchronized methods to read/write 
     synchronized (DBManager.class) { 
      super.onBackup(oldState, data, newState); 
      log.d("Backedup"); 
     } 
    } catch (IOException e) { 
     log.d("Backup error, Unable to write to file: " + e); 
    } 
} 

@Override 
public void onRestore(BackupDataInput data, int appVersionCode, ParcelFileDescriptor newState){ 
    log.d("Backup onrestore called"); 
    try { 
     //class is the lock since we are using static synchronized methods to read/write 
     synchronized (DBManager.class) { 
      super.onRestore(data, appVersionCode, newState); 
     } 
    } catch (IOException e) { 
     log.d("Backup error, Unable to read from file: " + e); 
    } 
} 

Я инициализировать BackupManager в mainactivity следующим образом:

BackupManager bm = new BackupManager(getApplicationContext()); 

и позвоните по номеру bm.dataChanged(); при изменении базы данных.

В ходе тестирования, я использую ADB, чтобы заставить резервную копию:

./adb shell bmgr backup com.test.android.backuptest 
./adb shell bmgr run 

но журналы никогда не попали и, когда я переустановить, данные не восстанавливаются.

Примечание: настройки резервного копирования и восстановления включены, а устройство имеет требуемый api 8, поэтому я понятия не имею, почему его не ударили!

+0

Как называется ваш класс Backup Manager? – sockeqwe

+0

Что это значит? У меня нет специального класса для BackupManager и используется андроид. – hphu

ответ

7

Причина, по которой мои функции backupAgentHelper никогда не вызывались, вызвана использованием транспорта. Ведение

./adb shell bmgr list transports 

показал

android/com.android.internal.backup.LocalTransport 
*com.google.android.gms/.backup.BackupTransportService 

По какой-то причине goodle TransportService не работал, но меняющегося его к внутреннему localtransport с

./adb shell bmgr transport android/com.android.internal.backup.LocalTransport 

фиксированная моя проблема, и теперь журналы показаны вверх.

Смежные вопросы