美文网首页android版本监容
Android 10 版本兼容之文件读取

Android 10 版本兼容之文件读取

作者: 传超_ | 来源:发表于2020-06-16 14:58 被阅读0次

    从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.<init>(FileInputStream.java:159)
            at java.io.FileInputStream.<init>(FileInputStream.java:115)
            at android.content.ContentResolver.openInputStream(ContentResolver.java:1200)
    

    分区存储兼容方案

    1. 临时方案
    • targetSdk 改为9(Api 28)或者以下
    • targetSdk 为10 (Api 29),manifest 文件增加android:requestLegacyExternalStorage="true" (buildToolsVersion 需要29以上)
        <manifest ... >
          <!-- This attribute is "false" by default on apps targeting
               Android 10 or higher. -->
          <application android:requestLegacyExternalStorage="true" ... >
            ...
          </application>
        </manifest>
        
    
    1. 推荐方案
    • 通过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())
    
                }
            }
    

    相关文章

      网友评论

        本文标题:Android 10 版本兼容之文件读取

        本文链接:https://www.haomeiwen.com/subject/pnjlxktx.html