在华为手机上 做选取图片剪裁遇到遇到授权无效 发现是
intent.putExtra("return-data", true);惹的祸 把这句删除了就好
还遇到另一个坑 拍照后剪裁时 无法加载图片 加入这两局就好
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
无法保存经过裁剪的图片 ,加入判断图片是否已经存在
var mFile = File(externalCacheDir,"crop_image.jpg")
try {
if (mFile.exists()) {
mFile.delete();
}
mFile.createNewFile();
} catch ( e:Exception) {
e.printStackTrace();
}
以下是我完整的代码:
/**
* 裁剪原始的图片
*/
fun cropRawPhoto(uri: Uri) {
try{
val intent = Intent("com.android.camera.action.CROP")
intent.setDataAndType(uri, "image/*")
// 设置裁剪
intent.putExtra("crop", "true")
// aspectX , aspectY :宽高的比例
intent.putExtra("aspectX", 1)
intent.putExtra("aspectY", 1)
val output_X = 480
val output_Y = 480
// outputX , outputY : 裁剪图片宽高
intent.putExtra("outputX", output_X)
intent.putExtra("outputY", output_Y)
val mExtStorDir = Environment.getExternalStorageDirectory().toString()
var mFile = File(externalCacheDir,"crop_image.jpg")
try {
if (mFile.exists()) {
mFile.delete();
}
mFile.createNewFile();
} catch ( e:Exception) {
e.printStackTrace();
}
// mHeadCachePath = mHeadCacheFile.getAbsolutePath();
mUriPath = Uri.parse("file://" + mFile.absolutePath)
//将裁剪好的图输出到所建文件中
// if(Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
mUriPath = Uri.fromFile(mFile)
// }else {
// var name= application.packageName+".fileProvider"
// mUriPath = FileProvider.getUriForFile(this,name,mFile)
// }
APP.Log( "ccccc[" + Thread.currentThread().getStackTrace()[2].getFileName() + "," + Thread.currentThread().getStackTrace()[2].getLineNumber() + "]"+mUriPath!!.path)
intent.putExtra(MediaStore.EXTRA_OUTPUT, mUriPath)
// intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString())
//注意:此处应设置return-data为false,如果设置为true,是直接返回bitmap格式的数据,耗费内存。设置为false,然后,设置裁剪完之后保存的路径,即:intent.putExtra(MediaStore.EXTRA_OUTPUT, uriPath);
// intent.putExtra("return-data", true);
// intent.putExtra("return-data", false)
// intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
startActivityForResult(intent, CROP_PHOTO)
}
catch (e:java.lang.Exception){
e.printStackTrace()
}
}
在Android7.0系统中,华为手机上进行图片选取和剪裁时出现授权无效的问题,导致无法保存裁剪后的图片。解决办法包括设置Intent权限标志和检查图片是否存在。完整修复代码已提供。
2329

被折叠的 条评论
为什么被折叠?



