resolveUri failed on bad bitmap uri on Camera

匿名 (未验证) 提交于 2019-12-03 01:48:02

问题:

I'm having troubles while trying to create a bitmap from a Camera AND an Image Picker.

I used a code that creates an Uri by the Camera so I added a condition to my function that already load pics from gallery. Here is the onActivityResult :

        protected void onActivityResult(int requestCode, int resultCode, Intent data) {          super.onActivityResult(requestCode, resultCode, data);          if (requestCode == RESULT_LOAD_IMAGE || requestCode == RESULT_CAMERA) {             Uri selectedImage = null;             if(requestCode == RESULT_LOAD_IMAGE)             {                 selectedImage = data.getData();             }             else if(requestCode == RESULT_CAMERA)             {                 selectedImage = imageUri;             }             if(resultCode == RESULT_OK && null != data) {                  String[] filePathColumn = {MediaStore.Images.Media.DATA};                 imgViewScan.setImageURI(selectedImage);                 try {                     InputStream stream = getContentResolver().openInputStream(                             selectedImage);                     bitmapLoaded = BitmapFactory.decodeStream(stream);                 } catch (IOException e) {                     Log.e("ScanAc", e.toString());                 }             }           }     } 

and here is the onClick for the Camera :

View.OnClickListener takePicture = new View.OnClickListener() {     public void onClick(View v) {          String fileName = "new-photo-name.jpg";         //create parameters for Intent with filename         ContentValues values = new ContentValues();         values.put(MediaStore.Images.Media.TITLE, fileName);         values.put(MediaStore.Images.Media.DESCRIPTION,"Image capture by camera");         //imageUri is the current activity attribute, define and save it for later usage (also in onSaveInstanceState)         imageUri = getContentResolver().insert(                 MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);         //create new Intent         Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);         intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);         intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);         Intent i = new Intent(                 MediaStore.ACTION_IMAGE_CAPTURE);          startActivityForResult(i, RESULT_CAMERA);     } }; 

I would like to precise that the gallery image pick works perfectly, the problem is only on the camera...

回答1:

 private void onClickCamera() {     Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);      if (takePictureIntent.resolveActivity(context.getPackageManager()) != null) {          ContentValues values = new ContentValues(1);         values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpg");         fileUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);         takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);         takePictureIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);         startActivityForResult(takePictureIntent, SELECT_PICTURE_CAMARA);      } else {         Toast.makeText(this, getString(R.string.error_no_camera), Toast.LENGTH_LONG).show();     }  } 

try this in your takePicture clickListener



回答2:

You can try creating temporary file like below. In onOnClick event

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); File f = new File(android.os.Environment.getExternalStorageDirectory(), "temp.jpg"); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f)); 

and for onActivityResult

File f = new File(android.os.Environment.getExternalStorageDirectory(), "temp.jpg"); BitmapFactory.Options bitmapOptions = new BitmapFactory.Options(); Bitmap bitmap = BitmapFactory.decodeFile(f.getAbsolutePath(), bitmapOptions); 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!