使用系統自帶的intent來實現拍照,相冊選擇圖片后剪切功能時,會遇到返回崩潰的問題。
原因是設置如下屬性時,
intent.putExtra("return-data", true);通過Intent中的data來傳遞,當數據過大,即超過1M(經測試,這個數值在不同手機還不一樣)時就崩了!!!!
imageCropUri = getUri();PRivate Uri getUri() { File tmpDir = new File(Environment.getExternalStorageDirectory() + "/yrhksd/image/"); if (!tmpDir.exists()) { tmpDir.mkdirs(); } File img = new File(tmpDir.getAbsolutePath() + "/pic.jpeg"); if (img.exists()) { img.delete(); } return Uri.fromFile(img);}Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");startActivityForResult(intent, GALLERY_REQUEST_CODE);
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == GALLERY_REQUEST_CODE && resultCode == RESULT_OK) { if (data == null) {//相冊 return; } Uri urifile = data.getData();// Uri curi = convertUri(urifile);// startImageZoom(curi); startImageZoom(urifile); }else if (requestCode == CROP_REQUEST_CODE && resultCode == RESULT_OK) { if (data == null) { return; }// //剪裁后的圖片// Bundle extras = data.getExtras();// if (extras == null) {// return;// }// Bitmap bm = extras.getParcelable("data");// Uri uri = saveBitmap(bm);// setImageToView(data); onStarted(); presenter.modifyAvatar(imageCropUri.getEncodedPath(), Constants.Host + "/member/upload"); } }/** * 剪裁圖片 * @param uri */private void startImageZoom(Uri uri) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); intent.putExtra("crop", "true"); intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); intent.putExtra("outputX", 300); intent.putExtra("outputY", 300); intent.putExtra("scale", true); intent.putExtra("return-data", false); intent.putExtra("noFaceDetection",true); //裁剪之后,保存在裁剪文件中,關鍵 intent.putExtra(MediaStore.EXTRA_OUTPUT, imageCropUri); intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); startActivityForResult(intent, CROP_REQUEST_CODE);}
新聞熱點
疑難解答