好的,所以我正在尝试在我的应用程序中实现数据备份,并且一直在遵循本指南。我已经实现了我的BackupAgentHelper
使用SharedPreferencesBackupHelper
。我没有收到任何错误,并且我肯定会dataChanged()
在所有首选项更改后调用,但是当我测试备份(`adb shell bmgr run)时,我在 LogCat 中获得了以下信息:
07-07 12:29:00.258: V/BackupManagerService(291): Scheduling immediate backup pass
07-07 12:29:00.258: V/BackupManagerService(291): Running a backup pass
07-07 12:29:00.258: V/BackupManagerService(291): clearing pending backups
07-07 12:29:00.258: V/PerformBackupTask(291): Beginning backup of 1 targets
07-07 12:29:00.289: V/BackupServiceBinder(291): doBackup() invoked
07-07 12:29:00.289: D/PerformBackupTask(291): invokeAgentForBackup on @pm@
07-07 12:29:00.297: I/PerformBackupTask(291): no backup data written; not calling transport
因此,作为参考,我在清单中添加了:
<application
android:allowBackup="true"
android:backupAgent="com.kcoppock.sudoku.SudokuBackupAgent"
也
<meta-data
android:name="com.google.android.backup.api_key"
android:value="my_key_goes_here" />
我的 BackupAgentHelper 是这样实现的:
public class SudokuBackupAgent extends BackupAgentHelper {
static final String SCORES = "SCORES";
static final String BACKUP_ID = "sudoku_backup";
@Override
public void onCreate() {
SharedPreferencesBackupHelper backupHelper =
new SharedPreferencesBackupHelper(this, SCORES);
addHelper(BACKUP_ID, backupHelper);
}
}
最后,在我的主要活动中,我要求像这样进行数据备份:
edit.putString(id + "_values", valueCache.toString());
edit.putString(id + "_hints", hintCache.toString());
edit.commit();
BackupManager backup = new BackupManager(this);
backup.dataChanged();
我试过调试,似乎我onCreate()
的 inSudokuBackupAgent
从来没有被调用过。或者至少它从未从调试器中得到。似乎没有找到任何更新的数据,我已经仔细检查以确保有数据要备份。我在这里缺少什么吗?
编辑:我应该补充一点,我正在设备(Galaxy Nexus)上进行测试,我什至尝试使用导出的版本 APK 进行测试。