Android备份代理(BackupAgent)从未被调用。

5

我正在尝试实现一个自定义的backupAgentHelper来备份我的应用程序数据库文件。我已经多次阅读了文档,但每当我尝试强制备份时,Create/onBackup/onRestore上的backupAgentHelper从未被调用。

清单在应用程序下有以下内容:

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

并且元数据

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

我的备份助手:

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);
    }
}

我在MainActivity中如下初始化BackupManager:

BackupManager bm = new BackupManager(getApplicationContext());

当数据库发生变化时,请调用bm.dataChanged();

在测试中,我使用adb来强制备份:

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

但是日志从未命中,重新安装后数据也从未恢复。
注意:备份和还原设置已启用,并且该设备具有超过所需API 8的功能,因此我不知道为什么它没有被调用!

你的备份管理器类叫什么名字? - sockeqwe
什么意思?我没有为BackupManager创建自定义类,而是使用了Android提供的类。 - hphu
1个回答

8
我的backupAgentHelper函数从未被调用的原因是由于所使用的传输方式。 执行
./adb shell bmgr list transports

展示了。
android/com.android.internal.backup.LocalTransport
*com.google.android.gms/.backup.BackupTransportService

由于某些原因,Google Transport Service 没有起作用,但是将其更改为内部的本地传输服务。
./adb shell bmgr transport android/com.android.internal.backup.LocalTransport

问题已经解决,现在日志已经显示出来了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接