Yalantis / uCrop

Image Cropping Library for Android
https://yalantis.com/blog/introducing-ucrop-our-own-image-cropping-library-for-android/
11.85k stars 2.15k forks source link

Both input and Output URI Must be Specified (AcitivityResultLauncher) #847

Open TeamRainless opened 2 years ago

TeamRainless commented 2 years ago

I'm using, essentially, a variation of the exact same code that everyone else is using since startActivityForResult is deprecated:

  ActivityResultLauncher<Intent> ucropActivityIntent = registerForActivityResult(
            new ActivityResultContracts.StartActivityForResult(),
            new ActivityResultCallback<ActivityResult>() {
                public void onActivityResult(ActivityResult result) {
                    if (result.getData() != null) {
                        Uri uri = UCrop.getOutput(result.getData());
                        startCropActivity(uri);
                    }
                }
            });

This loads the image picker and I choose my image, but as soon as I've picked the photo it takes me to the Activity where it throws the error: "Both input and OutPut URI Must Be Specified."

If I switch back to...

startActivityForResult(intent, 1);

...instead of:

ucropActivityIntent.launch(intent);

...it works just fine.

Don't know why it's working for everyone else but not for me.

Here's my startCropActivity:

    private void startCropActivity(@NonNull Uri uri) {
        String destinationFileName = SAMPLE_CROPPED_IMAGE_NAME;
        destinationFileName += ".jpg";
        UCrop uCrop = UCrop.of(uri, Uri.fromFile(new File(getCacheDir(), destinationFileName)));
        //uCrop = basisConfig(uCrop);
        uCrop = advancedConfig(uCrop);

        uCrop.start(MainActivity.this);
    }