BackupAgent子类用于自动还原但不是手动还原
我使用扩展了BackupAgentHelper的自定义类在我的应用中设置了Android备份服务......它基本如下所示:
public class MyBackups extends BackupAgentHelper {
@Override
public void onCreate() {
Log.d("MyBackups", "creating backup class");
this.addDefaultHelper();
String defaultSharedPrefsName = this.getPackageName() + "_preferences";
SharedPreferencesBackupHelper defaultPrefsHelper = new SharedPreferencesBackupHelper(this, defaultSharedPrefsName);
this.addHelper("default_prefs", defaultPrefsHelper);
}
@Override
public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data, ParcelFileDescriptor newState) throws IOException {
Log.d("MyBackups", "backing up " + data);
super.onBackup(oldState, data, newState);
}
@Override
public void onRestore(BackupDataInput data, int appVersionCode, ParcelFileDescriptor newState) throws IOException {
Log.d("MyBackups", "restoring");
super.onRestore(data, appVersionCode, newState);
// post-processing code goes here
}
}
我已经在清单文件中注册了它,如果我删除并重新安装应用程序,它会按预期运行,并显示所有日志消息。
但是,如果我手动请求恢复,像这样...
BackupManager backupManager = new BackupManager(getApplicationContext());
int error = backupManager.requestRestore(
new RestoreObserver() {
public void restoreStarting(int numPackages) {
Log.d("MyBackups", "restoreStarting");
}
public void restoreFinished(int error) {
Log.d("MyBackups", "restoreFinished");
}
public void onUpdate(int nowBeingRestored, String currentPackage) {
Log.d("MyBackups", "onUpdate");
}
}
);
Log.d("MyBackups", "requestRestore result: " + error);
... restoreStarting和restoreFinished被调用,并且错误结果为0,但没有任何一个BackupAgentHelper方法被调用 - “创建备份类”和“恢复”日志没有出现,并且我的后处理代码不会'运行。 看起来好像一个手动requestRestore绕过我的自定义BackupAgentHelper子类。
除了自动还原之外,是否还有其他需要进行手动还原的手动还原? 你有没有试过,它是为你工作?
这是一个古老的问题,但今天我能够做到这一点。 我希望它能帮助有同样问题的人。
您需要调用BackupManager dataChanged()发送备份请求。
然后,要测试它并启动备份,您需要运行
adb shell bmgr run
这将调用OnCreate,OnBackup。
然后在运行backupManager.requestRestore之后,您的OnCreate,OnRestore方法将被调用。
看看这里的示例,它确实是这样的(当你点击恢复按钮时):
https://android.googlesource.com/platform/development/+/0b3758ea4e53f9bfd0b112eaa4a7dd7b7f4040f5/samples/BackupRestore?autodive=0%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F
请参阅FileHelperExampleAgent.java代理。
链接地址: http://www.djcxy.com/p/25493.html上一篇: BackupAgent subclass used for automatic restore but not manual restore