Android Camera : data intent returns null

前端 未结 11 1700
不知归路
不知归路 2020-11-22 16:20

I have an android application which contains multiple activities.

In one of them I\'m using a button which will call the device camera :

public void         


        
11条回答
  •  臣服心动
    2020-11-22 16:59

    When we capture the image from Camera in Android then Uri or data.getdata() becomes null. We have two solutions to resolve this issue.

    1. Retrieve the Uri path from the Bitmap Image
    2. Retrieve the Uri path from cursor.

    This is how to retrieve the Uri from the Bitmap Image. First capture image through Intent that will be the same for both methods:

    // Capture Image
    captureImg.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            if (intent.resolveActivity(getPackageManager()) != null) {
                startActivityForResult(intent, reqcode);
            }
        }
    });
    

    Now implement OnActivityResult, which will be the same for both methods:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    
        if(requestCode==reqcode && resultCode==RESULT_OK)
        {
            Bitmap photo = (Bitmap) data.getExtras().get("data");
            ImageView.setImageBitmap(photo);
    
            // CALL THIS METHOD TO GET THE URI FROM THE BITMAP
            Uri tempUri = getImageUri(getApplicationContext(), photo);
    
            // Show Uri path based on Image
            Toast.makeText(LiveImage.this,"Here "+ tempUri, Toast.LENGTH_LONG).show();
    
            // Show Uri path based on Cursor Content Resolver
            Toast.makeText(this, "Real path for URI : "+getRealPathFromURI(tempUri), Toast.LENGTH_SHORT).show();
        }
        else
        {
            Toast.makeText(this, "Failed To Capture Image", Toast.LENGTH_SHORT).show();
        }
    }
    

    Now create all above methods to create the Uri from Image and Cursor methods:

    Uri path from Bitmap Image:

    private Uri getImageUri(Context applicationContext, Bitmap photo) {
        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        photo.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
        String path = MediaStore.Images.Media.insertImage(LiveImage.this.getContentResolver(), photo, "Title", null);
        return Uri.parse(path);
    }
    

    Uri from Real path of saved image:

    public String getRealPathFromURI(Uri uri) {
        Cursor cursor = getContentResolver().query(uri, null, null, null, null);
        cursor.moveToFirst();
        int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
        return cursor.getString(idx);
    }
    

提交回复
热议问题