项目场景:
项目中的一个小功能,需要 截图 并且上传截图以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目录下 传给服务器
这个网上有方法 自己去搜
共勉