升级SDK30之后,一步一个坑。走不完的路,填不完的坑。
一、遇到的问题
调用系统相册选取照片,然后裁剪,存储裁剪之后的照片,显示并上传服务器。多么正常的操作流程,相信大家都已经用过或者正在用。SDK升级到30,在Android11 上就失灵了。What?都知道是存储问题,怎么解决。现在告诉你。
二、解决思路
1、申请MANAGE_EXTERNAL_STORAGE最高的文件读取权限(一般不用)
2、通过 MediaStore API操作(我的选择)
1、SDK>=30 因为系统裁剪不能访问App的私有路径,
所以File 保存到公有路径Environment.getExternalStoragePublicDirectory(DIRECTORY_PICTURES)
2、SDK<30 可以保存到App的私有路径(App卸载可以删除) context.getExternalFilesDir(null).getAbsoluteFile()
三、实现
1、onActivityResult 回调
if (requestCode == REQUEST_CODE_ALBUM) {
if (data != null && data.getData() != null) {
//打开系统裁剪
gotoCrop(data.getData());
}
} else if (resultCode == RESULT_OK && requestCode == REQUEST_CODE_CAPTURE_CROP) {
//显示