Невозможно использовать резервную копию с Android Backup Service

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

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

Я вижу следующее в моем Logcat:

W/BackupManagerService﹕ dataChanged but no participant pkg='com.company.app' uid=10102

Вот моя реализация BackupAgentHelper https://gist.github.com/cloakedninjas/fe135cb04bf324e26b0c если это поможет...

public class CordovaBackupAgentHelper extends BackupAgentHelper {
    static final String FILE_NAME = "gameData.json";
    static final String FILES_BACKUP_KEY = "data_file";

    @Override
    public void onCreate() {
        FileBackupHelper helper = new FileBackupHelper(this, FILE_NAME);
        addHelper(FILES_BACKUP_KEY, helper);
    }

    @Override
    public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data,
                         ParcelFileDescriptor newState) throws IOException {

        Log.d(Backup.LOG_TAG, "Backup requested: " + oldState.toString() + " | "  + newState.toString());

        synchronized (Backup.sDataLock) {
            Log.d(Backup.LOG_TAG, "Backup requested: " + data.toString());
            super.onBackup(oldState, data, newState);
        }
    }

    @Override
    public void onRestore(BackupDataInput data, int appVersionCode,
                          ParcelFileDescriptor newState) throws IOException {

        synchronized (Backup.sDataLock) {
            Log.d(Backup.LOG_TAG, "Restore given: " + data.toString());
            super.onRestore(data, appVersionCode, newState);
        }
    }
}

Я никогда не вижу свою запись в журнале Backup requested, Я проверил, что мой манифест Android имеет следующий атрибут android:backupAgent="CordovaBackupAgentHelper"

Кто-нибудь может пролить свет на это?

Обновить

Я заметил, что если я изменю свой манифест на android:backupAgent="FooBar" Я не вижу ошибок о необъявленном классе FooBar, но все равно вижу dataChanged but no participant pkg при попытке сделать резервную копию. Таким образом, я предполагаю, что ошибка связана с невозможностью найти моего агента резервного копирования.

2 ответа

Решение

Поэтому моя проблема не заключалась в том, чтобы поместить атрибуты в правильный элемент:(

Я имел:

<manifest android:backupAgent="com.cloakedninjas.cordova.plugins.BackupAgentHelper" ...

Вместо:

<application android:backupAgent="com.cloakedninjas.cordova.plugins.BackupAgentHelper"...

Пара предложений:

В вашем манифесте, я думаю, что объявление агента резервного копирования должно использовать полное имя или краткую форму "точка":

android:backupAgent="com.example.project.CordovaBackupAgentHelper"

или же

android:backupAgent=".CordovaBackupAgentHelper"

Кроме того, в манифесте должно быть включено резервное копирование:

android:allowBackup="true"

Сказав это, я сомневаюсь, что эти изменения заставят предупреждение исчезнуть. У меня есть резервный агент, и я не могу создать предупреждающее сообщение, которое вы видите, изменив это объявление на недопустимые значения.

Если вы используете транспорт резервного копирования Google, зарегистрировались ли вы в службе, как описано в Руководстве по резервному копированию данных, и добавили ли ключ в свой манифест?

Вы пытались запустить операцию резервного копирования, используя adb bmgr инструмент, чтобы увидеть, если ваш агент вызывается несмотря на предупреждение?

Другие вопросы по тегам