Я создал службу Android Backup в моем приложении, используя пользовательский класс, который расширяет BackupAgentHelper ... это в основном выглядит следующим образом:BackupAgent подкласс используется для автоматического восстановления, но не в ручном режиме восстановления
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 не называются - - «создание резервных копий» и «восстановление» журналов не отображаются, и мой код после обработки не запускается. Кажется, что ручной запросRestore обходит мой собственный подкласс BackupAgentHelper.
Есть ли что-нибудь еще, что мне нужно для подключения к ручному восстановлению так же, как автоматическое восстановление? Вы пробовали это, и это работает для вас?
BTW, я не думаю, что это дублированный вопрос из http://stackoverflow.com/questions/8928669/onrestore-not-invoked-for-my-custom-backupagent, потому что в моем случае автоматическое восстановление, когда переустановка приложения работает правильно, и только ручное восстановление с requestRestore имеет проблему. – arlomedia