Android 2.2中的BackupManager&BackupAgent
我回顾了文档和示例BackupRestore应用程序,并编写了自己的测试应用程序,实现了android:backupAgent
。 我扩展了BackupAgent
类,因为我的主要担心是能够从数据库备份数据。 我甚至无法用这个功能做一个简单的概念验证应用程序工作。
为了使事情变得非常简单,我在清单中声明了android:backupAgent
作为MyBackupAgent
。 然后我创建了一个MyBackupAgent.java类,扩展了BackupAgent
。 然后,我在MyBackupAgent
类中为onBackup()
和onRestore()
方法创建了覆盖,就像在示例和文档中一样。 我在每个函数的开头添加了一个Log.i()
调用,以便我可以在LogCat中识别何时调用函数。 同样,我设置了这两个断点。 然后我继续执行我的代码来备份数据库。
我使用2.2w / Google API创建了一个模拟器图像,甚至在Accounts&Sync下添加了一个gmail帐户。 运行adb命令来启用bmgr
,备份应用程序,运行备份,卸载应用程序,重新安装应用程序等....我从来没有在Log.i()
命令的日志文件中得到任何消息onBackup()
或onRestore()
函数。
我试着在我的Evo 4g 2.2上运行。 同样的结果。 看来备份管理器没有调用MyBackupAgent
类中的onBackup()
和onRestore()
函数。
在我的日志中唯一的奇怪消息是来自BackupManagerService
一个消息,其中声明“Backup pass但e = true p = false”,我相信响应ADB命令备份应用程序。
有什么建议么? 我错误地认为onBackup()
和onRestore()
函数中的Log.i()
语句会显示在LogCat中?
输出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
我刚刚创建了一个新的模拟器图像,并且在那里没有问题。
我也尝试使用“新”备份管理器服务,并总是收到以下错误消息:
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
一切正常。 所以它不是我的代码问题,我认为...
问候!
检查您的手机设置。 如果同步服务被禁用,则通过Data Backup API进行备份将不起作用。
链接地址: http://www.djcxy.com/p/25477.html上一篇: BackupManager & BackupAgent in Android 2.2
下一篇: How to Insert and Update two tables using Entity Framework with ASP.NET MVC4