项目有上传头像的功能,可以通过相机或者选择相册照片进行裁剪上传,其中从相册选取照片裁剪代码如下:
// 选取照片后,调用系统裁剪功能
public static Intent Crop(String action, Uri uri) {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT)
.putExtra( MediaStore.EXTRA_OUTPUT, uri);
.setDataAndType(uri, "image/*")
.putExtra("crop", params.crop).putExtra(“true”)
.putExtra("aspectX", aspectX)
.putExtra("aspectY", aspectY)
.putExtra("outputX", outputX)
.putExtra("outputY", outputY)
.putExtra("return-data", false)
.putExtra("outputFormat", 'jpge")
.putExtra("noFaceDetection",true)
.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(intent,"REQ_CROP");
}
// 裁剪完成,获取裁剪照片
protected void onActivityResult(int requestCode, int resultCode,Intent data) {
switch (requestCode) {
case REQUEST_CROP:
bitmap = BitmapFactory.decodeStream(context.getContentResolver().openInputStream(uri));
........
}
经测试,htc 2.3.5 sumsung 4.4.4 ,nubia 5.0 等机型,均可以获取裁剪后的照片,返回的Intent的"data.getData()" 或者 "data.getParcelableExtra("data")"方法有值,但小米的机器却没有。
改用以下方法解决:传入裁剪后的图片保存文件路径destUri,裁剪结束后,用destUri获取裁剪后的图片,而不是用返回的Intent data数据获取【因为小米系统获取不到】
// srcuri 要裁剪的图片文件路径
// desturi 裁剪后的图片文件路径
public static Intent Crop(String action, Uri srcuri,Uri destUri) {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT)
.setDataAndType(srcuri, "image/*")
.putExtra("crop", params.crop).putExtra(“true”)
.putExtra("aspectX", aspectX)
.putExtra("aspectY", aspectY)
.putExtra("outputX", outputX)
.putExtra("outputY", outputY)
.putExtra("return-data", false)
.putExtra("outputFormat", 'jpge")
.putExtra("noFaceDetection",true)
.putExtra(MediaStore.EXTRA_OUTPUT, destUri);
startActivityForResult(intent,"REQ_CROP");
}
// 裁剪完成,获取裁剪照片
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case REQUEST_CROP:
bitmap = BitmapFactory.decodeStream(context.getContentResolver().openInputStream(destUri));
........
}
权作记录,可能这只是个特殊情况。其他人可能有更好方案或者解释