位图在相机意图中始终返回null

时间:2019-04-30 10:53:31

标签: android camera

我尝试从android捕获图像并将其上传到服务器,我执行了所有代码运行时权限,并上传到服务器和所有服务器。但是我从摄影机意图出发的位图为null。我一直尝试getExtras。对我来说,代码似乎是正确的,但位图始终为null。可能是什么原因

尝试使用

 data.getExtras().get("data"); 

如此处onActivityResult returned from a camera, Intent null

但没有帮助

我的代码,用于在单击按钮时执行相机意图

  CaptureImageFromCamera.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            intent = new 
   Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

            startActivityForResult(intent, 7);

        }
    });


 // Star activity for result method to Set captured image on image view 
 after click.
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == 7 && resultCode == RESULT_OK && data != null && 
   data.getData() != null) {

        Uri uri = data.getData();

        // Adding captured image in bitmap.
        // if(data.getData()==null){
        bitmap = (Bitmap)data.getExtras().get("data");
        //}//else{
        // bitmap = 
    MediaStore.Images.Media.getBitmap(this.getContentResolver(), data.getData());
        //}
        //  bitmap = 
    MediaStore.Images.Media.getBitmap(getContentResolver(), uri);

        // adding captured image in imageview.
        ImageViewHolder.setImageBitmap(bitmap);

    }

}

我想从相机意图中获取位图并在imageview中显示。

2 个答案:

答案 0 :(得分:1)

onActivityResult()中,您拥有:

if (requestCode == 7 && resultCode == RESULT_OK && data != null && 
    data.getData() != null) {

其中的前三个部分很好。但是,data.getData() != null有两个问题:

  1. 这无关紧要,因为if块不会尝试使用data.getData()(尽管您已经注释掉了代码)

  2. data.getData()对于null应该是ACTION_IMAGE_CAPTURE,因此对于正确实现的相机应用,您的if条件将始终为false

如果删除data.getData() != null,则应进入if区块,并能够尝试获取Bitmap

正如其他人指出的那样,此代码将为您提供缩略图大小的Bitmap。如果您正在寻找可以为您提供全分辨率图像的相机应用程序,则需要使用EXTRA_OUTPUTThis sample app演示了此操作。

答案 1 :(得分:0)

private void choosePhotoFromCamera() {
        log.info("choosePhotoFromCamera() is called");

        intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(intent, 1);
    }


@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == this.RESULT_CANCELED) {
        return;
    }

    // choose profile image from CAMERA
    if (requestCode == 1) {
        try {

           Bitmap bitmap = (Bitmap) data.getExtras().get("data");

            if (bitmap != null) {
                imageView.setImageBitmap(bitmap);
                strImagePath = getImageUri(bitmap).toString();
            }

        } catch (Exception e) {
            log.error("Exception after choosing image from camera : " + e.getMessage());
        }
    }