Home » Android » java – How to pass a URI to an intent?

java – How to pass a URI to an intent?

Posted by: admin March 11, 2020 Leave a comment


I’m trying to pass a URI-Object to my Intent in order to use that URI
in another activity…

How do I pass a URI ?

private Uri imageUri;
Intent intent = new Intent(this, GoogleActivity.class);
intent.putExtra("imageUri", imageUri);

How do I use now this URI in my other activity?

 imageUri = extras.getString("imageUri"); // I know thats wrong ...

Thank you guys

How to&Answers:

you can store the uri as string

intent.putExtra("imageUri", imageUri.toString());

and then just convert the string back to uri like this

Uri myUri = Uri.parse(extras.getString("imageUri"));


The Uri class implements Parcelable, so you can add and extract it directly from the Intent

// Add a Uri instance to an Intent
intent.putExtra("imageUri", uri);

// Get a Uri from an Intent
Uri uri = intent.getParcelableExtra("imageUri");

You can use the same method for any objects that implement Parcelable, and you can implement Parcelable on your own objects if required.


In Intent, you can directly put Uri. You don’t need to convert the Uri to string and convert back again to Uri.

Look at this simple approach.

// put uri to intent 

And to get Uri back from intent:

// Get Uri from Intent
Uri imageUri=getIntent().getData();


private Uri imageUri;
Intent intent = new Intent(this, GoogleActivity.class);
intent.putExtra("imageUri", imageUri.toString());

And then you can fetch it like this:

imageUri = Uri.parse(extras.getString("imageUri"));


here how I use it;
This button inside my CameraActionActivity Activity class where I call camera

 btn_frag_camera.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Intent intenImatToSec = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
                startActivityForResult(intenImatToSec, REQUEST_CODE_VIDEO);
                //intenImatToSec.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
                //intenImatToSec.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 10);
                //Toast.makeText(getActivity(), "Hello From Camera", Toast.LENGTH_SHORT).show();

    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {

            if (requestCode == REQUEST_CODE_IMG) {
                Bundle bundle = data.getExtras();
                Bitmap bitmap = (Bitmap) bundle.get("data");
                Intent intentBitMap = new Intent(getActivity(), DisplayImage.class);
                // aldıgımız imagi burda yonlendirdiğimiz sınıfa iletiyoruz
                ByteArrayOutputStream _bs = new ByteArrayOutputStream();
                bitmap.compress(Bitmap.CompressFormat.PNG, 50, _bs);
                intentBitMap.putExtra("byteArray", _bs.toByteArray());

            } else if (requestCode == REQUEST_CODE_VIDEO) {
                Uri videoUrl = data.getData();
                Intent intenToDisplayVideo = new Intent(getActivity(), DisplayVideo.class);
                intenToDisplayVideo.putExtra("videoUri", videoUrl.toString());

And my other DisplayVideo Activity Class

VideoView videoView = (VideoView) findViewById(R.id.videoview_display_video_actvity);
Bundle extras = getIntent().getExtras();
        Uri myUri=  Uri.parse(extras.getString("videoUri"));


If you want to use standard extra data field, you would do something like this:

private Uri imageUri;
Intent intent = new Intent(this, GoogleActivity.class);
intent.putExtra(Intent.EXTRA_STREAM, imageUri.toString());

The documentation for Intent says:

EXTRA_STREAM   added in API level 1 
A content: URI holding a stream of data associated with the Intent,
used with ACTION_SEND to supply the data being sent. 

Constant Value: "android.intent.extra.STREAM"

You don’t have to use the built-in standard names, but it’s probably good practice and more reusable. Take a look at the developer documentation for a list of all the built-in standard extra data fields.


you can do like this. imageuri can be converted into string like this.

intent.putExtra(“imageUri”, imageUri.toString());