使用 Android Service Backup(云备份)时出现 Unclear SecurityException
Posted
技术标签:
【中文标题】使用 Android Service Backup(云备份)时出现 Unclear SecurityException【英文标题】:Unclear SecurityException when using Android Service Backup (Cloud Backup) 【发布时间】:2012-09-09 11:53:09 【问题描述】:我尝试在Android Emulator上使用我的应用程序,其中包含android Backup Service 和我自己的BackupAgent
的用法。但是备份不起作用,尽管在 AndroidManifest.xml 中写入了权限。
权限:
日志中的警告: 09-17 09:05:58.553:WARN/PackageManager(73):未授予权限 android.permission.BACKUP 以打包 my.package (protectionLevel=3 flags=0x1be46 )
日志中的异常(当我尝试调用 requestRestore() 时): java.lang.SecurityException: getCurrentTransport: 用户 10040 和当前进程都没有 android.permission.BACKUP。
我的代码有什么问题?
UPD:我的清单
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="my.package">
<uses-permission android:name="android.permission.BACKUP"/>
<application android:name="my.package.MyApplicationName" android:backupAgent="my.package.MyBackupAgent">
<meta-data android:name="com.google.android.backup.api_key" android:value="my_backup_api_key">
</application>
</manifest>
【问题讨论】:
尝试要求整个应用程序的权限,你确定你在更改清单后构建项目? 我确定我已经构建了它,并且我的权限是针对整个应用程序的。 能否请您发布整个 androidManifest 文件? 我已经在我的问题更新中发布了它 Error : Neither user 10066 nor current process has android.permission.BACKUP的可能重复 【参考方案1】:Manifest permissions 的 Android 官方文档对权限一无所知
<uses-permission android:name="android.permission.BACKUP"/>
因此,您应该将其从清单中删除。 Android Backup Service 不需要需要额外的权限。
但是,可以使用指定的权限,但只能由“系统”应用程序使用,因为它需要 PROTECTION_SIGNATURE
或 PROTECTION_SIGNATURE_OR_SYSTEM
level of permissions。
只有在调用BackupManager.dataChanged(String packageName)方法时才需要这种权限,但通常在实现Backup Service时不需要该方法。
【讨论】:
调用 BackupManager.dataChanged 非常重要。它不需要 android.permission.BACKUP。【参考方案2】:正常的BackupAgent
操作不需要android.permission.BACKUP
权限。从您的清单中删除它 - 尽管它不应该阻止您的 BackupAgent
工作。
当您需要进行备份时,请务必调用BackupManager.dataChanged()
方法,否则您的 BackupAgent 将被调用一次,但不会再调用一次。它也不需要android.permission.BACKUP
。
【讨论】:
以上是关于使用 Android Service Backup(云备份)时出现 Unclear SecurityException的主要内容,如果未能解决你的问题,请参考以下文章
Cloud Server Backup Service(CSBS)
Android数据备份(Android Data Backup)