我正在尝试实现一个自定义的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的功能,因此我不知道为什么它没有被调用!