简体   繁体   中英

Capture photo intent resultCode

How can I detect wether the user take picture and selects it (with the confirm button on camera) or they just turn on a camera, take a picture and remove it (with the cancel button on camera)

When the user take picture I am loading that picture into an ImageView. If user hits confirm button then everything is OK but if user don't want that picture and decide to hit cancel button then the ImageView goes blank.

This is my camera intent :

void capturePhoto() {
//        ImagePicker.pickImage(this, "Select your image:");

        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        // Ensure that there's a camera activity to handle the intent
        if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
            // Create the File where the photo should go
            File f = null;

            try {
                f = setUpPhotoFile();
                mCurrentPhotoPath = f.getAbsolutePath();
                Uri photoURI = Uri.fromFile(f);
                takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
            } catch (IOException e) {
                e.printStackTrace();
                f = null;
                mCurrentPhotoPath = null;
                pictureUri = null;
            }

            startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
        }
    }

And onActivityResult, in both cases the resultCode is always 1. (note that RESULT_OK is -1) and I dont know why.

This is how I set image to ImageView using Glide:

Glide.with(this).load(mCurrentPhotoPath).centerCrop().into(imageView);

Any Suggestions?

Thanks!

you just need to pass if statement in onActivityresult cause if you use directly that URI or whatever you use which has no any frame set cause user cancel it so just do as given

 //if needed than
//public static final int RESULT_OK = -1;
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);


    if (resultCode == RESULT_OK) {
        switch (requestCode) {

        case REQUEST_TAKE_PHOTO:

                   //do your stuff here
        }
    }

You can use below code

 static final int REQUEST_IMAGE_CAPTURE = 1;

    private void dispatchTakePictureIntent() {
        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
            if (isCameraPermissionEnabled()) {
                startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
            }else {
                ActivityCompat.requestPermissions(this,
                        new String[]{Manifest.permission.CAMERA},
                        1);
            }
        }
    }

    public boolean isCameraPermissionEnabled() {

        return !(Build.VERSION.SDK_INT >= 23 &&
                ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED );
    }

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

        if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
            Bundle extras = data.getExtras();
            mBitmap = (Bitmap) extras.get("data");
            imageView.setBackground(new BitmapDrawable(getResources(),mBitmap));
        }
    }

//For more information https://developer.android.com/training/camera/photobasics.html

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM