这里裁剪完成,在图库中能看到正常看到裁剪后的图片
但是resultCode 一直返回0 data一直返回null
resultCode: -1 表示成 0 表示取消了操作
这种情况下 需要检查一下发起该裁剪任务activity或者所属的activity (fragment 运行必须依赖activity)
注意注意注意 launchMode 一定不要设置为 singleInstance
launchMode直接修改为默认 裁剪回调就正常了
其他需要注意的地方 选择图库 进行裁剪时需要注意 图库的图片地址为公共地址
裁剪任务不要临时授权 如果授权的话 部分手机会出错
我这里测试了 miui临时授权写权限,会导致出错
使用拍照 进行裁剪时 返回的地址为私有地址
则需要临时授权,否则无法裁剪
临时授权代码如下
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
裁剪目录输出目录的设置
使用Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) 路径
出现很多问题,仅在模拟器测试成功 直接pass掉了
我这里使用的如下方法返回的uri 传一个文件名就可以 比如 name = "123.jpg"
private fun getCropUri(name: String): Uri? { 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) } return requireContext().contentResolver.insert( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values ) }
val cropUri = getCropUri("crop_face_${System.currentTimeMillis()}.jpg")
intent.putExtra(MediaStore.EXTRA_OUTPUT,cropUri)
图片裁剪异常问题