在浏览器中打开 URL
使用默认浏览器打开
此示例显示如何在内置 Web 浏览器中而不是在应用程序中以编程方式打开 URL。这样,你的应用就可以打开网页,而无需在清单文件中包含 INTERNET
权限。
public void onBrowseClick(View v) {
String url = "http://www.google.com";
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
// Verify that the intent will resolve to an activity
if (intent.resolveActivity(getPackageManager()) != null) {
// Here we use an intent without a Chooser unlike the next example
startActivity(intent);
}
}
提示用户选择浏览器
请注意,此示例使用 Intent.createChooser()
方法:
public void onBrowseClick(View v) {
String url = "http://www.google.com";
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
// Note the Chooser below. If no applications match,
// Android displays a system message.So here there is no need for try-catch.
startActivity(Intent.createChooser(intent, "Browse with"));
}
在某些情况下,URL 可以以 www
开头。如果是这种情况,你将获得此异常:
android.content.ActivityNotFoundException
:找不到处理 Intent 的 Activity
该 URL 必须始终以 “http://” 或 “https://” 开头。因此,你的代码应该检查它,如下面的代码片段所示:
if (!url.startsWith("https://") && !url.startsWith("http://")){
url = "http://" + url;
}
Intent openUrlIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
if (openUrlIntent.resolveActivity(getPackageManager()) != null) {
startActivity(openUrlIntent);
}
最佳实践
检查设备上是否有可以接收隐式意图的应用程序。否则,你的应用会在调用 startActivity()
时崩溃。要首先验证应用程序是否存在以接收意图,请在 Intent 对象上调用 resolveActivity()
。如果结果为非 null,则至少有一个应用程序可以处理意图,并且可以安全地调用 startActivity()
。如果结果为 null,则不应使用 intent,如果可能,应禁用调用 intent 的功能。