Kotlin中如何导出Room Database并通过邮件发送?附件报错如何解决
问题解决思路
- 检查动态权限申请
Android 6.0(API 23)开始读写外部存储属于危险权限,仅在AndroidManifest.xml中静态声明无效,必须在代码中主动触发动态权限申请,待用户授权后才能获得存储访问权限。你可以先进入系统设置-应用管理-找到你的应用-权限管理,确认存储权限是否已处于允许状态。 - 调整数据库文件存储路径
Room默认生成的数据库文件存放在应用私有目录(/data/data/你的应用包名/databases/)下,第三方应用(Gmail、Google Drive等)无权限直接访问该目录的文件。你需要先将私有目录下的数据库文件复制到公共外部存储的可访问目录(例如下载目录、文档目录)后,再调用分享逻辑。 - 修正Intent配置
调用分享Intent时,必须添加读取权限授予标记:intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
确保接收方应用能够获得附件文件的读取权限。 - 适配不同URI规则
- 如果你当前没有做高版本适配,Android 6.0设备可以直接使用
file://格式的URI指向公共目录下的数据库文件,不需要引入FileProvider,避免配置错误导致的权限问题。 - 如果你已经引入FileProvider做高版本兼容,请检查
file_paths.xml中的路径配置是否覆盖了你存放数据库文件的目录,确保生成的content URI合法有效。
- 如果你当前没有做高版本适配,Android 6.0设备可以直接使用
- 排查设备兼容问题
霍尼韦尔CT50为工业级定制设备,部分ROM会有额外的存储权限限制:你可以先测试用其他第三方邮件应用(如系统自带邮件APP)尝试添加附件,排查是否为Gmail/Google Drive的版本兼容问题;也可以在代码中先自行读取复制后的数据库文件,确认文件本身可正常访问,排除文件损坏、路径错误等问题。
内容的提问来源于stack exchange,提问作者sonfollower
相关产品推荐
相关产品推荐

