适配Android新版存储隐私政策的跨安装备份恢复功能优化咨询
Android 11+分区存储下备份恢复功能适配方案
适配核心逻辑是放弃原有直接读写公共存储路径的实现,改用符合权限规则的交互方式,可选方案如下:
- 首选方案:使用系统存储访问框架(SAF)实现手动备份恢复
- 导出备份时,启动
ACTION_CREATE_DOCUMENT意图唤起系统文件选择器,由用户自主选择备份文件的保存位置、自定义文件名,拿到返回的URI后将备份数据写入即可,生成的文件用户可自由分享、转移到其他设备 - 恢复备份时,启动
ACTION_OPEN_DOCUMENT意图唤起系统文件选择器,由用户手动选中之前导出的备份文件,拿到返回的URI后读取内容完成导入即可,该方式不受应用卸载重装、更换设备的限制,不需要申请额外存储权限,完全符合系统隐私规则
- 导出备份时,启动
- 辅助优化:自定义专属备份文件后缀,例如
.yourappname_backup,在文件选择器中过滤该后缀,降低用户找备份文件的成本 - 自动备份方案:开启系统自带的应用自动备份能力,在AndroidManifest中配置
android:allowBackup="true",同时通过android:fullBackupContent属性指定需要备份的私有数据规则,用户设备登录谷歌账号且开启备份功能的情况下,系统会自动将应用数据同步到Google Drive,卸载重装、换新设备登录同个账号时会自动恢复数据,该方案可作为手动备份的补充,注意该功能可被用户手动关闭,无法替代手动备份能力 - 特殊场景方案:如果你的应用属于文件管理、全设备备份类工具,确实需要批量访问外部存储所有文件,可申请
MANAGE_EXTERNAL_STORAGE权限,该权限需要在Google Play提交应用时说明使用场景,通过审核后才能上架,普通应用不建议使用,容易被拒审
适配注意事项
- 拿到SAF返回的URI后,可调用
getContentResolver().takePersistableUriPermission()申请持久化访问权限,避免设备重启后应用失去对该URI的访问权限 - 备份文件内容中建议新增格式版本号标识,兼容不同应用版本的备份导入逻辑,避免格式不兼容导致导入失败
内容的提问来源于stack exchange,提问作者Antony Ng
相关产品推荐
相关产品推荐

