Kotlin Android10 open failed: EACCES (Permission denied) 解决方法 AndroidQ

项目场景:

项目中的一个小功能,需要 截图 并且上传截图以file类型传给后端

问题描述:

上传截图数据过程中 后端返回给我 open failed: EACCES (Permission denied)的错误提示

@RequiresApi(Build.VERSION_CODES.M)
    fun cutScreen() {
        //获取view缓存
        this.window.decorView.isDrawingCacheEnabled = true
        val bmp: Bitmap = this.window.decorView.drawingCache
        //这里"IMG"+ Calendar.getInstance().time如果没有可能会出现报错
        val uri = Uri.parse(
            MediaStore.Images.Media.insertImage(
                contentResolver,
                bmp,
                "IMG" + Calendar.getInstance().time,
                null
            )
        )
        val file = Utils.getFileFromUri(uri, this)
        sendMultipart("url", 0, file)
    }

原因分析:

android 10 需要手动申请权限并且只能访问自己目录下的文件

解决方案:

1.手动申请读取权限

   /*申请读取存储的权限*/
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (checkSelfPermission(PERMISSION_WRITE_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(arrayOf(PERMISSION_WRITE_STORAGE), REQUEST_PERMISSION_CODE)
        }
    }

    myService.subscribe(MyService.RESPONSE_TOPIC, 1)
    main()

2.在AndroidManifest.xml的application中添加一句话
android:requestLegacyExternalStorage=“true”

3.将图片拷贝到自己的APP目录下 传给服务器
这个网上有方法 自己去搜

共勉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值