Search code examples
javaandroidandroid-camera-intent

Unable to get captured image uri


I am trying to get Captured image Uri but not getting this below code how I get uri. Toast message giving me null result

 Button b=findViewById(R.id.button);
    b.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(i,2);
        }
    });
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Toast.makeText(Authentication.this,""+data.getData(),Toast.LENGTH_LONG).show();
}

Solution

  • From Android version LOLLIPOP you can not get the URI directly for security reasons try this-

        private static Uri getSharableImageUri(Context context) {
    File outputDir = context.getCacheDir();
    File imagePath = new File(outputDir, context.getString(R.string.app_name));
    if (!imagePath.exists()) {
        imagePath.mkdir();
    }
    File tempFile = new File(imagePath, "image.jpg");
    Uri uri = null;
    try {
        if (!tempFile.exists()) {
            tempFile.createNewFile();
        }
        uri = FileProvider.getUriForFile(context, context.getPackageName() + ".fileprovider", tempFile);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return uri;
    }
    

    And in your button's click listener use this-

         Button b=findViewById(R.id.button);
    b.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    try {
        String state = Environment.getExternalStorageState();
        if (Environment.MEDIA_MOUNTED.equals(state)) {
    
            mImageCaptureUri = getSharableImageUri(context);
        }
        if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP) {
            intent.setClipData(ClipData.newRawUri("", mImageCaptureUri));
    
        }
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageCaptureUri);
        intent.putExtra("return-data", true);
        startActivityForResult(intent, 2);
    
    } catch (Exception e) {
       e.printStackTrace();
    }
        }
    });
    

    }

    And get the URI in onActivityResult if the result is successful -

        public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
                if (resultCode == Activity.RESULT_OK && requestCode==2) {
        Toast.makeText(Authentication.this,""+data.getData(),Toast.LENGTH_LONG).show();
        }