I am working on an android app, I need to take image capture from the app and return the capture uri to pass it to api. I am working on oreo 8 . I try many solutions on stackoverflow but none of them work correctly.
I get null uri in onActivityResult.
I tried to get it directly from the data like this:
uri = data.getData();
also i tried to get the uri from Bitmap like this:
Bitmap photo = (Bitmap) data.getExtras().get("data"); 
uri = getImageUri(getApplicationContext(), photo);
But still not working.
This is my current code:
button2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(hasStoragePermission(IMAGE_CAPTURE)){
                Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
                    startActivityForResult(takePictureIntent, IMAGE_CAPTURE);
                }
            }
        }
    });
}
@Override
protected void onActivityResult(int requestCode, final int resultCode, Intent data) {
    switch(requestCode) {
        case 0: {
            if (requestCode == PICK_PHOTO_FOR_AVATAR && resultCode == Activity.RESULT_OK) {
                if (data == null) {
                    Toast.makeText(getApplicationContext(), "error selecting file!, Please try again ", Toast.LENGTH_LONG).show();
                    return;
                } else {
                    uri = data.getData();
                }
            }
            break;
        }
        case 1: {
            if (requestCode == IMAGE_CAPTURE && resultCode == Activity.RESULT_OK) {
                if (data == null) {
                    Toast.makeText(getApplicationContext(), "error selecting file!, Please try again ", Toast.LENGTH_LONG).show();
                    return;
                } else {
                        uri = data.getData();
                        /* // Also I try this:
                        Bitmap photo = (Bitmap) data.getExtras().get("data");
                        uri = getImageUri(getApplicationContext(), photo); */
                }
            }
            break;
        }
    }
        super.onActivityResult(requestCode, resultCode, data);
}
public Uri getImageUri(Context inContext, Bitmap inImage) {
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
    String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
    return Uri.parse(path);
}
    private boolean hasStoragePermission(int requestCode) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED &&
                checkSelfPermission(Manifest.permission.CAMERA)
                        != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, requestCode);
            requestPermissions(new String[]{Manifest.permission.CAMERA},
                    requestCode);
            return false;
        } else {
            return true;
        }
    } else {
        return true;
    }
}
and this is the run time permission checker:
  private boolean hasStoragePermission(int requestCode) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED &&
                checkSelfPermission(Manifest.permission.CAMERA)
                        != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, requestCode);
            requestPermissions(new String[]{Manifest.permission.CAMERA},
                    requestCode);
            return false;
        } else {
            return true;
        }
    } else {
        return true;
    }
}
and this is my permissions:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
What I missed? and Thanks!
 
    