ArthurHub / Android-Image-Cropper

Image Cropping Library for Android, optimized for Camera / Gallery.
Apache License 2.0
6.4k stars 1.38k forks source link

Only allow camera, NOT galery #510

Open willemevenwel opened 6 years ago

willemevenwel commented 6 years ago

Hi,

When starting crop image with: CropImage.activity().start(this);, the intent chooser thingie pops up and prompts the user to select camera/gdrive/galery etc...is there a way to enforce only camera here? I want to force the user to take a new picture.

Regards,

Willem

charlesng commented 6 years ago

I face the same issue, but I tried to get a rid of using the traditional way to take photo from camera first https://developer.android.com/training/camera/photobasics.html

And then access it from FileProvider in onActivityResult

if (requestCode == REQUEST_CAMERA_TAKE_PHOTO && resultCode == this.RESULT_OK) {
            File photoFile = new File(mCurrentPhotoPath);
            if (photoFile.exists()) {
                Uri photoURI = FileProvider.getUriForFile(HomePageActivity.this,
                        "com.example.android.fileprovider",
                        photoFile);
                cropImage(photoURI);
            }
        }

 private void cropImage(Uri uri) {
        int height = (int) UIUtils.dip2px(160);
        int width = (int) UIUtils.dip2px(160);
        Intent intent = CropImage.activity(uri)
                .setCropShape(CropImageView.CropShape.OVAL)
                .setGuidelines(CropImageView.Guidelines.ON)
                .setMinCropWindowSize(width, height)
                .setMaxCropResultSize(width, height)
                .getIntent(HomePageActivity.this);
        startActivityForResult(intent, CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE);
    }

For me, it works quite nature.

You may have this issue using the above method https://github.com/ArthurHub/Android-Image-Cropper/issues/455

charlesng commented 6 years ago

@birjubhatt It is just my own custom function to convert the dp to px since different devices have different ratio on dp.

birjubhatt commented 6 years ago

@charlesng ok...thanks

birjubhatt commented 6 years ago

@charlesng i have one question also....if i use your method for camera crop image what i have to do if i use open camera from recyclerview adapter ??

i currently use

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); ((Activity) context).startActivityForResult(intent, CAMERA_REQUEST);

for camera open and in main activity i called adapter's onactivity result

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); adapter.onActivityResult(requestCode, resultCode, data); }

if i use your suggestion to private void cropImage(Uri uri) {} you use startActivityForResult(intent, CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE);

how can i manage them if i already in my activity result ??

charlesng commented 6 years ago

@birjubhatt What is adapter.onActivityResult(requestCode, resultCode, data) ? Is it the function of RecyclerAdapter?

birjubhatt commented 6 years ago

@charlesng sorry for my bad english ...i dont know how to explain in english verywell...

its my custom method...its call when onactivity result call from main activity.....

i done it....i just change some point from your method

i understand your code sometime letter...thanks again..

i missed to check startActivityForResult(intent, CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE);

condition in my code...

like you put if (requestCode == REQUEST_CAMERA_TAKE_PHOTO && resultCode == this.RESULT_OK) { } i add ... else if( CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE){ Bundle bundle = data.getExtras(); Bitmap bitmap = bundle.getParcelable("data"); } that gives me result of your cropImage(Uri uri) {startActivityForResult } 's result ....

charlesng commented 6 years ago

@birjubhatt For me ,I still improve my english =[

else if( CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE){
Bundle bundle = data.getExtras();
Bitmap bitmap = bundle.getParcelable("data");
}

This part is exactly the way Android official did, but it is only the thumbnail of the image. If you want to use the full-size , use the uri and send to the CropImageActivity is better.

My suggestion is not the way this library provided, but at least a workaround for this issue