• Android 11 分区存储图片裁剪上传异常问题


    1、targetSdkVersion 29 以下 不包含29 使用 android:requestLegacyExternalStorage="true"
    可以解决问题
    android:requestLegacyExternalStorage="true" 操作文件需要设置为true

    2、如果targetSdkVersion大于29的话 把裁剪后的路径修改为公共路径 但是仅在模拟上可运行,真机还是不行
    getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
    getExternalStoragePublicDirectory 这个方法早就标记删除了

    3、targetSdkVersion大于29 

    先处理 调用系统裁剪的输出目录
    val values = ContentValues()
    values.put(MediaStore.Images.Media.DISPLAY_NAME, name)
    values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg")
    values.put(MediaStore.Images.Media.DATE_MODIFIED, System.currentTimeMillis() / 1000)
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
        values.put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_DCIM)
    }
    val uri = requireContext().contentResolver.insert(
        MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
        values
    )

    使用上面的uri 作为裁剪的输出目录
    intent.putExtra(MediaStore.EXTRA_OUTPUT, uri)

    Android 10 及以下可以 直接 File(uri.path) 获取到文件 这样就可以进行上传了
    Android 11 及以上就需要特殊处理了
    使用contentResolver 处理
    下面的方法获取后缀
    MimeTypeMap.getSingleton().getExtensionFromMimeType(contentResolver.getType(uri))
    // 获取到输入流inputStream
    contentResolver.openInputStream(uri)
    // 可以使用context.getExternalFilesDir 图片的目录 创建一个文件
    context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)?.absolutePath
    读取输入流 使用输出流包装文件 把输入流写入到输出流中 当前文件就有内容了
    直接把当前file 上传即可
    Android 11 直接使用 File(uri.path) 上传 会提示 open failed: EACCES (Permission denied)


    targetSdkVersion大于29的情况下)sdk 大于28 下面的权限就不要声明了,声明了也没有什么用
    android:name="android.permission.WRITE_EXTERNAL_STORAGE" 
    动态申请存储权限时,申请 android.permission.READ_EXTERNAL_STORAGE 这个权限即可
     
  • 相关阅读:
    Windows内存管理系列
    Windows C/C++ 内存泄露检测
    TCP/IP协议学习(六) 链路层详解
    TCP/IP协议学习(五) 基于C# Socket的C/S模型
    TCP/IP协议学习(四) 协议概述
    STM32学习笔记(十) CAN通讯测试(环回模式)
    STM32学习笔记(九) 外部中断,待机模式和事件唤醒
    STM32学习笔记(八) SPI总线(操作外部flash)
    TCP/IP协议学习(三) STM32中ETH驱动配置注意事项
    TCP/IP协议学习(二) LWIP用户自定义配置文件解析
  • 原文地址:https://www.cnblogs.com/rchao/p/15628112.html
Copyright © 2020-2023  润新知