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

下一篇: Android BackupAgent never called