27

I would like to use intent.setData(Uri uri) to pass data obtained from a URL. In order to do this, I need to be able to create a Uri from a URL (or from a byte[] I read from the URL, or a ByteArrayInputStream I create from the byte[], etc). However, I cannot figure out how this is supposed to be done.

So, is there anyway to create a Uri from data obtained from a URL without first writing the data to a local file?

5 Answers 5

42

Use URL.toURI() (Android doc) method.

Example:

URL url = new URL("http://www.google.com"); //Some instantiated URL object URI uri = url.toURI(); 

Make sure to handle relevant exception, such as URISyntaxException.

Sign up to request clarification or add additional context in comments.

5 Comments

toURI returns "URI" from net package, setData method needs "Uri"
This does not take into account the special characters that a parameter might have.
@QualtarDemix that is not what was asked by the OP. I provided a solution based on this requirement.
@BuhakeSindi: Well that is implicit. The idea is to get the best possible solution. Even if that wasn't explicitly asked.
Suppose http is not part of the url string?
13

I think your answer can be found from here..

Uri.Builder.build() works quite well with normal URLs, but it fails with port number support.

The easiest way that I discovered to make it support port numbers was to make it parse a given URL first then work with it.

Uri.Builder b = Uri.parse("http://www.yoursite.com:12345").buildUpon(); b.path("/path/to/something/"); b.appendQueryParameter("arg1", String.valueOf(42)); if (username != "") { b.appendQueryParameter("username", username); } String url = b.build().toString(); 

Source : http://twigstechtips.blogspot.com/2011/01/android-create-url-using.html

1 Comment

Also, instead of hardcoding "http://...", you could use yourUrlVariable.toString() instead.
11

From How to create a Uri from a URL?

Uri uri = Uri.parse( "http://www.facebook.com" ); 

Comments

4

Note that in Android, Uri's are different from Java URI's. Here's how to avoid using hardcoded strings, and at the same time, create a Uri with just the path portion of the http URL string encoded to conform to RFC2396:

Sample Url String:

String thisUrl = "http://lapi.transitchicago.com/api/1.0/ttarrivals.aspx?key=[redacted]&mapid=value" 

method:

private Uri.Builder builder; public Uri getUriFromUrl(String thisUrl) { URL url = new URL(thisUrl); builder = new Uri.Builder() .scheme(url.getProtocol()) .authority(url.getAuthority()) .appendPath(url.getPath()); return builder.build(); } 

To handle query strings you will need to parse the url.getQuery() as described here and then feed that into builder. appendQueryParameter().

Comments

2
try { uri = new URI(url.toString()); } catch (URISyntaxException e) { } 

1 Comment

Cannot instantiate the type Uri

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.