【问题标题】:How to fix following error when using Camera and Android Image Cropper library使用 Camera 和 Android Image Cropper 库时如何修复以下错误
【发布时间】:2019-08-22 01:22:46
【问题描述】:

在使用 Camera 和 Android Image Cropper 库时如何解决以下错误:

拍照后,它会重新打开相机和裁剪图像。

这将为相机打开两次。谁能说问题出在哪里? 我无法解决此错误。 请帮助我。

配置:

compileSdkVersion 28
minSdkVersion 18
targetSdkVersion 28

依赖:

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

我的Permissioncamera 代码:

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();
}
}

【问题讨论】:

    标签: android image camera


    【解决方案1】:

    我遇到了同样的问题。我想问题是在 CameraActivity 返回了一些结果之后, CropImage 活动才开始。这就是相机被打开两次的原因。你可以试试这样的:

    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 变量将包含位图图像,您可以根据需要对其进行处理。

    它对我有用,希望它也对你有用,祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-27
      • 2018-01-29
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 2017-10-11
      相关资源
      最近更新 更多