欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

安卓10外部存储的访问

程序员文章站 2022-03-21 13:17:18
今天试图读取保存在Download文件夹下的一张图片,但是BitmapFactory.decodeFile(path)返回了null,logcat给出了E/BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: /storage/emulated/0/Download/1.bmp: open failed: EACCES (Permission denied)的错误。EACCES是一个内核错误,个人理解是Error Acc...

今天试图读取保存在Download文件夹下的一张图片,但是BitmapFactory.decodeFile(path)返回了null,logcat给出了E/BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: /storage/emulated/0/Download/1.bmp: open failed: EACCES (Permission denied)的错误。EACCES是一个内核错误,个人理解是Error Access的缩写,表示没有这个访问这个路径的权限。
在访问了官方文档后解决了问题,简单的解决办法是在manifest的application标签中添加:android:requestLegacyExternalStorage="true"就可以解决问题,通过这个设置就停用了安卓10中默认的分区存储,从而获得了外部存储的访问权限。
但是需要注意的是:明年(2021年),主要平台版本将要求所有应用都使用分区存储,无论应用的目标 SDK 级别是多少。因此,您应该提前确保您的应用能够使用分区存储。为此,请确保针对搭载 Android 10(API 级别 29)及更高版本的设备启用了该行为。但是,如果某个应用在安装时启用了传统外部存储,则该应用会保持此模式,直到卸载为止。无论设备后续是否升级为搭载 Android 10 或更高版本,或者应用后续是否更新为以 Android 10 或更高版本为目标平台,此兼容性行为均适用。
官方推荐的做法是使用存储访问框架打开文件,这里不再赘述,直接给出链接。

管理分区外部存储访问
https://developer.android.com/training/data-storage/files/external-scoped?hl=zh-cn
使用存储访问框架打开文件
https://developer.android.com/guide/topics/providers/document-provider?hl=zh-cn

本文地址:https://blog.csdn.net/mjx19951117/article/details/107451520

相关标签: Android