android安卓10无法读取文件,Android 10 版本兼容之文件读取

从Android 6动态权限开始,Android每次升级版本都会搞些新功能需要兼容,刚好遇到Android 10关于选取图片的问题,所以写篇文章整理一下(突然发现整理的很片面,还有很多其他的要考虑,所以先这样吧...懒得继续了,剩下的你们自己去官网看吧)

Android 10 分区存储

分区存储相关介绍

分区存储遇到的兼容问题

通过File直接读取文件错误 (已有读取权限)

java.io.FileNotFoundException: /storage/emulated/0/DCIM/Alipay/1592268891880.png: open failed: EACCES (Permission denied)

at libcore.io.IoBridge.open(IoBridge.java:496)

at java.io.FileInputStream.(FileInputStream.java:159)

at java.io.FileInputStream.(FileInputStream.java:115)

at android.content.ContentResolver.openInputStream(ContentResolver.java:1200)

分区存储兼容方案

临时方案

targetSdk 改为9(Api 28)或者以下

targetSdk 为10 (Api 29),manifest 文件增加android:requestLegacyExternalStorage="true" (buildToolsVersion 需要29以上)

...

推荐方案

通过Uri读取图片

val cursor = context.contentResolver.query(

MediaStore.Images.Media.EXTERNAL_CONTENT_URI,

arrayOf(

BaseColumns._ID

), null, null, MediaStore.Images.Media.DATE_ADDED.plus(" DESC")

)

cursor?.apply {

if (moveToFirst()) {

do {

val resId = cursor.getLong(cursor.getColumnIndex(BaseColumns._ID))

val uri = ContentUris.withAppendedId(

MediaStore.Images.Media.EXTERNAL_CONTENT_URI,

resId

)

} while (cursor.moveToNext())

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值