BackupManager& Android 2.2中的BackupAgent

时间:2010-09-24 19:11:56

标签: android android-backup-service

我查看了文档和示例BackupRestore应用程序,并编写了我自己的实施android:backupAgent的测试应用程序。我扩展了BackupAgent类,因为我主要担心的是能够从数据库备份数据。我似乎无法使用此功能制作一个简单的概念验证应用程序。

为了使事情格外简单,我在清单中将android:backupAgent声明为MyBackupAgent。然后我创建了一个MyBackupAgent.java类,扩展了BackupAgent。然后,我为onBackup()类中的onRestore()MyBackupAgent方法创建了覆盖,就像在示例和文档中一样。我在每个函数的最开头添加了Log.i()调用,以便在调用函数时可以在LogCat中识别。同样,我在这两个方面都设置了断点。然后我继续实现我的代码来备份数据库。

我使用2.2w / Google API创建了一个模拟器图像,甚至在Accounts&同步。运行adb命令以启用bmgr,备份应用程序,运行备份,卸载应用程序,重新安装应用程序等....我从未在Log.i()的日志文件中收到消息onBackup()onRestore()函数中的任何一个命令。

我在我的Evo 4g上再次尝试运行2.2。结果相同。备份管理器似乎没有调用onBackup()类中的onRestore()MyBackupAgent函数。

我在日志中得到的唯一奇怪信息是来自BackupManagerService说明“备份传递,但e = true p = false”,我相信ADB命令可以备份应用程序。

有什么建议吗?我错误地认为Log.i()onBackup()函数中的onRestore()语句会显示在LogCat中吗?

3 个答案:

答案 0 :(得分:5)

输出Backup pass but e=true p=false表示备份管理器已启用(e=true)但未配置(p=false)。

只有满足这两个条件时才会运行备份。因此,出于某种原因,在您的仿真器映像上没有配置备份管理器,在挖掘代码之后我注意到它应该在启动期间自动配置(DefaultActivity

I/ActivityManager(   73): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000000 cmp=com.android.sdksetup/.DefaultActivity } from pid 0

我刚创建了一个新的模拟器图像,它在那里没有问题。

答案 1 :(得分:3)

我还尝试使用“新”备份管理器服务,并始终收到以下错误消息:

12-01 09:58:54.420: WARN/BackupTransportService(9965): Unknown package in backup request: @pm@
12-01 09:58:54.450: WARN/BackupTransportService(9965): Not ready for backup request right now: [OperationScheduler: enabledState=false lastSuccess=2010-10-07/09:33:51 moratoriumSet=2010-12-01/09:53:32 moratorium=1970-01-01/01:00:00 trigger=1970-01-01/01:00:00]
12-01 09:58:54.450: WARN/PerformBackupThread(9965): Backup pass unsuccessful, restaging

有人知道这意味着什么???

如果我使用以下命令将备份传输更改为本地版本

adb shell bmgr transport android/com.android.internal.backup.LocalTransport
一切顺利。所以这不是我的代码的问题,我想......

问候!

答案 2 :(得分:3)

检查手机的设置。如果同步服务已禁用,则通过Data Backup API进行备份将无法正常工作。