当用户更换设备或者重置现有设备数据的时候,他们可能希望Google Play能恢复他们以前设备上安装的程序。刚开始的时候
该功能并没有实现,所以有很多用户都开始抱怨他们安装的程序和数据丢失了。
对于用户数据非常小的情况(小于1M),比如 用户的设置信息、日志信息或者游戏的高分信息以及其他状态信息,备份API为此种情况
提供了一个轻量级的解决方案。这节内容将告诉您如何集成备份API到程序中,以及如何使用备份API来恢复数据。
注册 Android 备份服务
如下内容需要使用 Android Backup Service,
该服务需要先注册。 点击这里来注册。
一旦注册完成,该服务会生成一个用于Manifest文件中的XML标签,内容和下面的示例代码类似:
帮助
<meta-dataandroid:name="com.google.android.backup.api_key"
android:value="ABcDe1FGHij2KlmN3oPQRs4TUvW5xYZ"/>
|
注意每个包名对应一个备份Key。如果您有多个程序,则需要分别注册。
配置程序的Manifest
使用备份服务需要添加两个东西到 您的Manifest中。首先,声明那个类作为您的备份代理,然后添加上面的代码到Application标签内。
假设您的备份代理名称为 TheBackupAgent,修改内容和下面的代码类似:
帮助
<applicationandroid:label="MyApp"
android:backupAgent="TheBackupAgent">
...
<meta-dataandroid:name="com.google.android.backup.api_key"
android:value="ABcDe1FGHij2KlmN3oPQRs4TUvW5xYZ"/>
...
</application>
|
编写备份代理类
最简单的方式就是继承
BackupAgentHelper。
其 内容是非常简单的,创建一个TheBackupAgent类并继承BackupAgentHelper,然后重载
onCreate()函数即可。
在onCreate()函数中,创建一个 BackupHelper。
该助手类是用于备份数据的特殊实例。当前,Android框架中包含了两种助手类:
FileBackupHelper和 SharedPreferencesBackupHelper。
当你创建完助手类,只需要把备份的数据使用函数addHelper()添加到BackupAgentHelper类即可, 参数Key是以后用来恢复数据用的。大多数情况下实现备份功能的代码差不多只有10行。
下面是一个备份游戏高分的示例:
帮助
importandroid.app.backup.BackupAgentHelper;
importandroid.app.backup.FileBackupHelper;
publicclassTheBackupAgentextendsBackupAgentHelper {
// The name of the SharedPreferences file
staticfinalString HIGH_SCORES_FILENAME ="scores";
// A key to uniquely identify the set of backup data
staticfinalString FILES_BACKUP_KEY ="myfiles";
// Allocate a helper and add it to the backup agent
@Override
voidonCreate() {
FileBackupHelper helper =newFileBackupHelper(this, HIGH_SCORES_FILENAME);
addHelper(FILES_BACKUP_KEY, helper);
}
}
|
为了便于扩展, FileBackupHelper的构造函数可以附加一个文件名参数,
就像下面的代码一样,您可以同时备份分数和游戏关卡数据:
@Override
voidonCreate() {
FileBackupHelper helper =newFileBackupHelper(this, HIGH_SCORES_FILENAME, PROGRESS_FILENAME);
addHelper(FILES_BACKUP_KEY, helper);
}
|
备份配置数据同样的简单。
创建一个 SharedPreferencesBackupHelper,这里不是使用文件名作为参数了而是使用需要备份的设置Group名字。如果保存程序高分使用的是配置而不是保存的文件中,那么备份代码如下:
帮助
importandroid.app.backup.BackupAgentHelper;
importandroid.app.backup.SharedPreferencesBackupHelper;
publicclassTheBackupAgentextendsBackupAgentHelper {
// The names of the SharedPreferences groups that the application maintains. These
// are the same strings that are passed to getSharedPreferences(String, int).
staticfinalString PREFS_DISPLAY ="displayprefs";
staticfinalString PREFS_SCORES ="highscores";
// An arbitrary string used within the BackupAgentHelper implementation to
// identify the SharedPreferencesBackupHelper's data.
staticfinalString MY_PREFS_BACKUP_KEY ="myprefs";
// Simply allocate a helper and install it
voidonCreate() {
SharedPreferencesBackupHelper helper =
newSharedPreferencesBackupHelper(this, PREFS_DISPLAY, PREFS_SCORES);
addHelper(MY_PREFS_BACKUP_KEY, helper);
}
}
|
您可以添加任意数量的备份助手实例,但是需要注意的是 每种类型的备份助手只需要创建一个实例对象即可。
一个FileBackupHelper 可以处理所有需要备份的文件,同样
一个SharedPreferencesBackupHelper 可以处理所有需要备份的
配置信息。
请求一次备份
为了请求一次备份,只需要创建一个
BackupManager实例,然后调用
dataChanged() 函数即可。
帮助
importandroid.app.backup.BackupManager;
...
publicvoidrequestBackup() {
BackupManager bm =newBackupManager(this);
bm.dataChanged();
}
|
该函数会告诉Backup Manager数据已经准备好了,可以同步到云端了。在未来的某个时间点,Backup Manager会调用您的备份代理类
的onBackup() 函数。
只要您的数据变化了,您就可以调用该上面的函数。如果在备份操作执行之前您触发了两次备份请求,则只会备份一次最新的数据。
从备份中恢复数据
一般情况下您无需手工恢复数据,如果您的程序在用户设备上重新安装后会自动恢复数据。然而,如果需要手工触发的话,您可以调用函数requestRestore()