невозможно вызвать метод резервного копирования в Android - PullRequest
2 голосов
/ 06 октября 2011

Я хочу реализовать резервное копирование и восстановление, но он не выполняет метод onBackup().Мой код в файле манифеста:

<application android:icon="@drawable/icon" android:label="@string/app_name"
        android:backupAgent="MyBackupAgent" android:restoreAnyVersion="true"
        android:allowBackup="true" android:enabled="true">
        <meta-data android:name="com.google.android.backup.api_key"
            android:value="AEdPqrEAAAAIMiLZ2_rMQFv6Huz3BYWpuxfVoK68Wk0CFMiXwA" />
        <activity android:name=".Splash" android:label="@string/app_name"
            android:theme="@android:style/Theme.NoTitleBar"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
</application>

В Activity, когда я добавляю или обновляю любой элемент, который я хочу сделать резервную копию, поэтому мой код -

BackupManager bm = new BackupManager(this);
bm.dataChanged();

и в файле MyBackupAgentЯ написал

public class MyBackupAgent extends BackupAgent {

    @Override
    public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data,
            ParcelFileDescriptor newState) throws IOException {
        // TODO Auto-generated method stub
        System.out.println("in MyBackupAgent");
    }

    @Override
    public void onRestore(BackupDataInput data, int appVersionCode,
            ParcelFileDescriptor newState) throws IOException {
        // TODO Auto-generated method stub

    }
}

Но здесь, в методе onBackup(), он ничего не печатает, так как я могу определить, входит ли он в метод onbackup или нет?

Ответы [ 5 ]

2 голосов
/ 06 октября 2011

Вы пытались запустить "adb shell bmgr run" из командной строки?

Это заставит менеджер резервного копирования выполнять свою работу.

Кажется, что dataChanged() планирует работу,Но работа не будет выполнена (ждет вечно), если не будет принудительно, как описано выше.

1 голос
/ 06 октября 2011

Может ли это быть проблемой?:

Только Backup Manager может вызывать onBackup () вашего агента резервного копирования метод. Каждый раз, когда данные вашего приложения изменяются, и вы хотите выполнить резервное копирование, вы должны запросить операцию резервного копирования, позвонив dataChanged () (см. Запрос резервного копирования для получения дополнительной информации). Резервное копирование запрос не приводит к немедленному вызову вашего onBackup () метод. Вместо этого Диспетчер резервного копирования ждет подходящего времени, затем выполняет резервное копирование для всех приложений, которые запросили резервное копирование с момента последнего резервного копирования.

http://developer.android.com/guide/topics/data/backup.html#BackupAgent

0 голосов
/ 07 сентября 2013

У меня была точно такая же проблема, и добавление

static 
{
    try
    {
            Class.forName("android.app.backup.BackupManager");
    }
    catch (Exception e)
    {
        throw new RuntimeException(e);
    }
}

внутри моего класса MyBackupAgent решило проблему.До этого мой onBackup никогда не вызывался.Я наконец понял это после того, как наткнулся на Android Book Worm, который, кажется, является рабочим примером.

Я также изменил строку в AndroidManifest.xml с

android:backupAgent="MyBackupAgent"

на

android:backupAgent=".MyBackupAgent"

но я не уверен, что это что-то сделало.

Вот ссылка, которая помогла мне: ohloh.net поиск кода для android: backupAgent =

Также: Местоположение SVN для проекта Android BookWorm

0 голосов
/ 28 октября 2011

У меня такая же проблема. Если я запускаю «adb shell bmgr run», резервное копирование происходит успешно, однако я не могу заставить dataChanged () что-нибудь сделать? У меня все настроено правильно, потому что резервное копирование выполняется с помощью команды adb; это действительно просто навсегда, чтобы запланировать? Я скопировал свой apk на свой телефон, и dataChanged () там тоже ничего не сделал. Я надеялся, что смогу сообщить пользователю об успешном резервном копировании, но это невозможно сделать, поскольку планирование этого скрыто (если это действительно так).

0 голосов
/ 06 октября 2011

Просто пример, который вы можете попробовать:

http://www.edumobile.org/android/android-development/backup-manager/

РЕДАКТИРОВАТЬ: извините, я неправильно прочитал ваш XML, вы можете попробовать удалить этот тег на Manifest

        <meta-data android:name="com.google.android.backup.api_key"
        android:value="AEdPqrEAAAAIMiLZ2_rMQFv6Huz3BYWpuxfVoK68Wk0CFMiXwA" />

@ p / s: если вы можете поделиться кодом, это может немного помочь.

...