在浏览器中打开 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 的功能。