Невозможно использовать резервную копию с 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
инструмент, чтобы увидеть, если ваш агент вызывается несмотря на предупреждение?