Question

I am launching the camera to capture a picture, which is stored in a new file in a specific folder, in the external storage.

The problem is that when I try to decode the image from the file using BitmapFactory.decodeFile() in my onActivityResult() method, the returned image is null. Is this because the file is not yet complete (i.e. the process of the camera has not finished to save the image)? How can I solve this problem?

Here is the code with which I am launching the camera:

private void launchCamera() {
    //create folder
    File imagesFolder = new File(
            Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
            Consts.MEDIA_EXTERNAL_FOLDER);
    if(!imagesFolder.exists())
        imagesFolder.mkdirs();
    String fileName = "pic_"+Consts.CAMERA_DATE_FORMAT.format(new Date());
    File image = null;
    try {
        image = File.createTempFile(fileName, ".jpg", imagesFolder);
    } catch(IOException e) {
        Log.e(TAG, "Error creating new file.");
    }
    capturedImageURI = Uri.parse(image.getAbsolutePath());

    //launch camera
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, capturedImageURI);
    startActivityForResult(intent, CAMERA_ACTION);
}

And this is when I get the image in the onActivityResult():

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    switch (requestCode) {

        case CAMERA_ACTION:
            getContentResolver().notifyChange(capturedImageURI, null);
            File f = new File(capturedImageURI.toString());

            decodedBitmap = Helper.decodeSampledBitmapFromResource(filePath);
            ImageView imageView = new ImageView(this);
            imageView.setImageBitmap(decodedBitmap);

            break;
     }
Était-ce utile?

La solution

How can I solve this problem?

File, AFAIK, does not understand file:/// URL formats, which is what you will get from capturedImageURI.toString(). Rather than regenerating the File, use the one you already created.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top