1. 程式人生 > >解決小米miui系統呼叫系統裁剪圖片功能崩潰失敗的問題

解決小米miui系統呼叫系統裁剪圖片功能崩潰失敗的問題

專案中選擇圖片作為頭像,都要經過剪裁的過程。一般我們都呼叫系統剪裁的方法。不過該方法在其它系統上都顯示正常,但是在miui系統上就出錯了。經測試發現其他系統
cropBitmap = data.getParcelableExtra("data");

方法都是有值的,而miui系統卻沒有。查資料發現miui系統預設的裁剪圖片可能裁剪得過大,或對return-data分配的資源不足,造成return-data失敗

失敗的剪裁方法如下:

Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
// 下面這個crop=true是設定在開啟的Intent中設定顯示的VIEW可裁剪
intent.putExtra("crop"
, "true"); // aspectX aspectY 是寬高的比例 intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); // outputX outputY 是裁剪圖片寬高 intent.putExtra("outputX", 200); intent.putExtra("outputY", 200); intent.putExtra("outputFormat", Bitmap.CompressFormat.PNG.toString()); intent.putExtra("noFaceDetection", true); intent.putExtra("return-data"
, true); startActivityForResult(intent, REQUE_CODE_CROP);

解決方案:

剪裁後儲存資源路徑uri,在onActivityResult()方法中再提取uri圖片轉化成bitmap即可。

修改後的方法如下:

Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
// 下面這個crop=true是設定在開啟的Intent中設定顯示的VIEW可裁剪
intent.putExtra("crop", "true");
// aspectX aspectY 是寬高的比例 intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); // outputX outputY 是裁剪圖片寬高 intent.putExtra("outputX", 200); intent.putExtra("outputY", 200); intent.putExtra("outputFormat", Bitmap.CompressFormat.PNG.toString()); intent.putExtra("noFaceDetection", true); /** * 此方法返回的圖片只能是小圖片(sumsang測試為高寬160px的圖片) * 故只儲存圖片Uri,呼叫時將Uri轉換為Bitmap,此方法還可解決miui系統不能return data的問題 */ // intent.putExtra("return-data", true); uritempFile = Uri.parse("file://" + "/" + Environment.getExternalStorageDirectory().getPath() + "/" + "small.jpg"); intent.putExtra(MediaStore.EXTRA_OUTPUT, uritempFile); startActivityForResult(intent, REQUE_CODE_CROP);
try {
    cropBitmap= BitmapFactory.decodeStream(getContentResolver().openInputStream(uritempFile));
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

好了,這樣就解決了,如果有更好的方法歡迎留言!