我正在尝试使BackupAgent正常工作,但我无法让它工作。这是我的示例代码:
布局只是一个TextView和一个Button。
MainActivity:
...
public static final String PREF_NAME = "TestPref";
private static final String TEST_KEY = "TEST";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final SharedPreferences pref = getApplicationContext()
.getSharedPreferences(PREF_NAME, MODE_PRIVATE);
if (pref.getString(TEST_KEY, "").length() == 0) {
pref.edit().putString(TEST_KEY, "new Date())
.commit();
new BackupManager(getApplicationContext()).dataChanged();
}
Button button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TextView tv = (TextView) findViewById(R.id.textView1);
if ("START_VALUE".equalsIgnoreCase(tv.getText().toString())) {
tv.setText(pref.getString(TEST_KEY, ""));
}
}
});
}
BackupHelper就是我在这里提供的那些:http://developer.android.com/reference/android/app/backup/SharedPreferencesBackupHelper.html 我用我使用过的文件调整了pref文件的名称。
在清单中,我补充道
android:backupAgent="TheBackupAgent"
(申请标签)
和备份元数据
<meta-data android:name="com.google.android.backup.api_key"
android:value="{registered_key}" />
所以它真的是一个非常简单的应用程序。
我现在正在做以下事情:
1)启动应用
2)在xml文件中使用“START_VALUE”初始化Textview,因此我按下按钮并显示pref-value
3)我从控制台运行“adb shell bmgr run”以立即运行备份
4)我运行“adb uninstall com.foo.backuptest”
5)我运行“adb install com.foo.backuptest”
现在没有从云中恢复值(时间戳)。生成一个新的。
我的错误在哪里?
答案 0 :(得分:1)
您的清单文件需要包含此文件以启用备份:
android:allowBackup="true"
android:backupAgent="TheBackupAgent"
您的手机备份设置怎么样?确保选中“备份我的数据”和“自动恢复”,并输入有效的备份帐户电子邮件ID。
要了解Google备份数据的时间和频率,请查看以下链接: Android backup service - when and how often to backup?
根据此测试人员(我刚刚进行了备用频率测试):https://advancedweb.hu/2014/12/09/practical_measurement_of_the_android_backup_manager/
备份管理器服务每小时响应一次(我在测试中也证明了这一点),只要在上次数据备份请求后的一小时内调用至少一个DataChanged()
要使用命令行进行快速测试,请尝试以下命令:
确保启用数据备份:adb shell bmgr enable true
请求数据备份:adb shell bmgr备份your.package.name
启动数据备份:adb shell bmgr run
要卸载您的应用:adb uninstall your.package.name
然后安装您的应用:adb install your.package.name