Я настроил службу резервного копирования Android в своем приложении, используя собственный класс, который расширяет BackupAgentHelper... в основном это выглядит так:
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.
Есть ли что-то еще, что мне нужно подключить, чтобы ручное восстановление работало так же, как и автоматическое? Вы пробовали это, и это работает для вас?