Я не понимаю, почему вы столкнулись с этой проблемой.
У меня та же проблема: я хочу поддержать резервное копирование с приложением, которое поддерживает также 1.5 (API 3).
Нет проблем в создании моего BackupAgentHelper
класса, так как этот класс никогда не вызывается из моего собственного кода, а из BackupManager
, то есть самой системы.Поэтому мне не нужно оборачивать это, и я не понимаю, почему вы должны это делать:
public class MyBackupAgentHelper extends BackupAgentHelper {
@override onCreate()
{
\\do something usefull
}
Однако вы хотите запустить резервное копирование, для этого вам нужно позвонитьна BackupManager.dataChanged()
всякий раз, когда ваши данные изменяются, и вы хотите сообщить системе о резервном копировании (используя BackupAgent
или BackupAgentHelper
).
Вам нужно обернуть этот класс, так как вы вызываете его от себякод приложения.
public class WrapBackupManager {
private BackupManager wrappedInstance;
static
{
try
{
Class.forName("android.app.backup.BackupManager");
}
catch (Exception e)
{
throw new RuntimeException(e);
}
}
public static void checkAvailable() {}
public void dataChanged()
{
wrappedInstance.dataChanged();
}
public WrapBackupManager(Context context)
{
wrappedInstance = new BackupManager(context);
}
}
Затем вы вызываете его из кода при изменении предпочтения или сохранении некоторых данных.Некоторый код из моего приложения:
private static Boolean backupManagerAvailable = null;
private static void postCommitAction() {
if (backupManagerAvailable == null) {
try {
WrapBackupManager.checkAvailable();
backupManagerAvailable = true;
} catch (Throwable t) {
backupManagerAvailable = false;
}
}
if (backupManagerAvailable == true) {
Log.d("Fretter", "Backup Manager available, using it now.");
WrapBackupManager wrapBackupManager = new WrapBackupManager(
FretterApplication.getApplication());
wrapBackupManager.dataChanged();
} else {
Log.d("Fretter", "Backup Manager not available, not using it now.");
}
Так что, надеюсь, это работает для вас!
(Если вы звоните adb shell bmgr run
каждый раз, когда вы хотите эмулировать реальное инициированное системой резервное копирование, оно должно правильно выполнять резервное копирование и восстановление при переустановке приложения.)