我希望use intent.setData(Uri uri)
传递从网址获取的数据。为了做到这一点,我需要能够从URL(或从URL中读取的byte []或从ByteArrayInputStream
创建的byte[]
等)创建Uri。 。但是,我无法弄清楚应该怎么做。
那么,无论如何都要从URL获取的数据创建Uri而不先将数据写入本地文件?
答案 0 :(得分:43)
使用URL.toURI()
(Android doc)方法。
示例:
URL url = new URL("http://www.google.com"); //Some instantiated URL object
URI uri = url.toURI();
确保处理相关例外,例如URISyntaxException
。
答案 1 :(得分:11)
我认为你的答案可以从这里找到..
Uri.Builder.build()
可以很好地处理普通网址,但是在端口号支持下失败了。
我发现使其支持端口号的最简单方法是首先解析给定的URL,然后使用它。
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();
来源:http://twigstechtips.blogspot.com/2011/01/android-create-url-using.html
答案 2 :(得分:8)
来自How to create a Uri from a URL?
Uri uri = Uri.parse( "http://www.facebook.com" );
答案 3 :(得分:3)
请注意,在Android中,Uri与Java URI不同。以下是如何避免使用硬编码字符串,同时创建一个Uri,只使用编码为符合RFC2396的http URL字符串的路径部分:
示例网址字符串:
String thisUrl = "http://lapi.transitchicago.com/api/1.0/ttarrivals.aspx?key=[redacted]&mapid=value"
方法:
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();
}
要处理查询字符串,您需要按照here所述解析url.getQuery(),然后将其提供给构建器。 appendQueryParameter()。
答案 4 :(得分:2)
try {
uri = new URI(url.toString());
} catch (URISyntaxException e) {
}
答案 5 :(得分:0)
URI uri = null;
URL url = null;
// Create a URI
try {
uri = new URI("www.abc.com");
} catch (URISyntaxException e) {
}
// Convert an absolute URI to a URL
try {
url = uri.toURL();
} catch (IllegalArgumentException e) {
// URI was not absolute
} catch (MalformedURLException e) {
}
// Convert a URL to a URI
try {
uri = new URI(url.toString());
} catch (URISyntaxException e) {
}