Как исправить следующую ошибку при использовании камеры и библиотеки Android Image Cropper - PullRequest
0 голосов
/ 03 марта 2019

Как исправить следующую ошибку при использовании камеры и библиотеки Android Image Cropper:

После съемки фотографии снова открывается камера и обрезается изображение.

Это откроется дважды для камеры,Кто-нибудь может сказать, где проблема?Я не могу решить эту ошибку.Пожалуйста, помогите мне.

Конфиг:

compileSdkVersion 28
minSdkVersion 18
targetSdkVersion 28

зависимости:

implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0'

Мой Permission и camera код:

if (checkSelfPermission(Manifest.permission.CAMERA)!= PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.CAMERA}, MY_CAMERA_REQUEST_CODE);
}
else
{                                                  
Intent camera_intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
File file=new File(Environment.getExternalStorageDirectory(),"file"+String.valueOf(System.currentTimeMillis()+".jpg"));
Uri uri = FileProvider.getUriForFile(NewAdActivity.this, BuildConfig.APPLICATION_ID + ".provider",file);
camera_intent.putExtra("return-data", true);
camera_intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(camera_intent,1);
}

и onActivityResult:

public void onActivityResult(int requestCode,int resultCode,Intent data)
{
if (requestCode==1&&resultCode==RESULT_OK)       //camera
{
CropImage.activity(uri).setAspectRatio(1,1).setRequestedSize(512,512).start(this);
}
else  if (requestCode==2&&resultCode==RESULT_OK) {     //gallery
uri=data.getData();
CropImage.activity(uri).setAspectRatio(1,1).setRequestedSize(512,512).start(this);
}

else if (requestCode==CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE&&resultCode==RESULT_OK)
{
CropImage.ActivityResult result = CropImage.getActivityResult(data);
 Uri resutlUri=result.getUri();
images.get(current_image).setImageURI(resutlUri);
fill_images[current_image]=true;
BitmapDrawable bd=((BitmapDrawable) images.get(current_image).getDrawable());
Bitmap bm=bd.getBitmap();
ByteArrayOutputStream bao=new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG,90,bao);
image_base64=Base64.encodeToString(bao.toByteArray(),Base64.DEFAULT);
checkConnection();
new upload_image().execute();
}
}

1 Ответ

0 голосов
/ 21 августа 2019

У меня была такая же проблема.Я предполагаю, что проблема в том, что действие CropImage запускается после того, как CameraActivity вернула какой-то результат.Вот почему камера открывается дважды.Вы можете попробовать что-то вроде этого:

CropImage.activity().setGuidelines(CropImageView.Guidelines.ON).start((Activity) view.getContext());

После этого я получил изображение как растровое изображение путем переопределения onActivityResult():

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(resultCode == RESULT_OK){
         if(requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE){
            CropImage.ActivityResult result = CropImage.getActivityResult(data);

            Bitmap bmp = null; 

                try {
                    InputStream is = context.getContentResolver().openInputStream(result.getUri());
                    BitmapFactory.Options options = new BitmapFactory.Options();
                    bmp = BitmapFactory.decodeStream(is, null, options);

                } catch (Exception ex) {
                    Log.i(getClass().getSimpleName(), ex.getMessage());
                    Toast.makeText(context, errorConvert, Toast.LENGTH_SHORT).show();
                }
        }
    }
}

В конце ваша переменная bmp будет содержать растровое изображениеи вы можете обработать его по мере необходимости.

Это сработало для меня, надеюсь, это сработает и для вас, и удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...