Android 云同步之备份API

当用户更换设备或者重置现有设备数据的时候,他们可能希望Google Play能恢复他们以前设备上安装的程序。刚开始的时候
该功能并没有实现,所以有很多用户都开始抱怨他们安装的程序和数据丢失了。

对于用户数据非常小的情况(小于1M),比如 用户的设置信息、日志信息或者游戏的高分信息以及其他状态信息,备份API为此种情况
提供了一个轻量级的解决方案。这节内容将告诉您如何集成备份API到程序中,以及如何使用备份API来恢复数据。

注册 Android 备份服务

如下内容需要使用 Android Backup Service
该服务需要先注册。 点击这里来注册
一旦注册完成,该服务会生成一个用于Manifest文件中的XML标签,内容和下面的示例代码类似:

帮助

1

2

<meta-dataandroid:name="com.google.android.backup.api_key"

android:value="ABcDe1FGHij2KlmN3oPQRs4TUvW5xYZ"/>

注意每个包名对应一个备份Key。如果您有多个程序,则需要分别注册。

配置程序的Manifest

使用备份服务需要添加两个东西到 您的Manifest中。首先,声明那个类作为您的备份代理,然后添加上面的代码到Application标签内。
假设您的备份代理名称为 TheBackupAgent,修改内容和下面的代码类似:

帮助

1

2

3

4

5

6

7

<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行。

下面是一个备份游戏高分的示例:

帮助

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

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的构造函数可以附加一个文件名参数,
就像下面的代码一样,您可以同时备份分数和游戏关卡数据:

1

2

3

4

5

@Override

voidonCreate() {

    FileBackupHelper helper =newFileBackupHelper(this, HIGH_SCORES_FILENAME, PROGRESS_FILENAME);

    addHelper(FILES_BACKUP_KEY, helper);

}

备份配置数据同样的简单。
创建一个 SharedPreferencesBackupHelper
,这里不是使用文件名作为参数了而是使用需要备份的设置Group名字。如果保存程序高分使用的是配置而不是保存的文件中,那么备份代码如下:

帮助

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

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() 函数即可。

帮助

1

2

3

4

5

6

7

importandroid.app.backup.BackupManager;

...

publicvoidrequestBackup() {

  BackupManager bm =newBackupManager(this);

  bm.dataChanged();

}

该函数会告诉Backup Manager数据已经准备好了,可以同步到云端了。在未来的某个时间点,Backup Manager会调用您的备份代理类
onBackup() 函数。
只要您的数据变化了,您就可以调用该上面的函数。如果在备份操作执行之前您触发了两次备份请求,则只会备份一次最新的数据。

从备份中恢复数据

一般情况下您无需手工恢复数据,如果您的程序在用户设备上重新安装后会自动恢复数据。然而,如果需要手工触发的话,您可以调用函数requestRestore()

原文地址:点击打开链接


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值