如何从内置web浏览器而不是应用程序中的代码打开URL?

我试过了:

try {
    Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(download_link));
    startActivity(myIntent);
} catch (ActivityNotFoundException e) {
    Toast.makeText(this, "No application can handle this request."
        + " Please install a webbrowser",  Toast.LENGTH_LONG).show();
    e.printStackTrace();
}

但我有个例外:

No activity found to handle Intent{action=android.intent.action.VIEW data =www.google.com

当前回答

只需使用简短的一个,即可在浏览器中打开您的Url:

Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("YourUrlHere"));
startActivity(browserIntent);

其他回答

android.webkit.URLUtil自Api级别1(android 1.0)以来,guessUrl(String)方法工作得非常好(即使使用file://或data://)。用作:

String url = URLUtil.guessUrl(link);

// url.com            ->  http://url.com/     (adds http://)
// http://url         ->  http://url.com/     (adds .com)
// https://url        ->  https://url.com/    (adds .com)
// url                ->  http://www.url.com/ (adds http://www. and .com)
// http://www.url.com ->  http://www.url.com/ 
// https://url.com    ->  https://url.com/
// file://dir/to/file ->  file://dir/to/file
// data://dataline    ->  data://dataline
// content://test     ->  content://test

在“活动”调用中:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(URLUtil.guessUrl(download_link)));

if (intent.resolveActivity(getPackageManager()) != null)
    startActivity(intent);

有关详细信息,请查看完整的guessUrl代码。

试试看:

Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
startActivity(browserIntent);

这对我来说很好。

至于缺少的“http://”,我会这样做:

if (!url.startsWith("http://") && !url.startsWith("https://"))
   url = "http://" + url;

我也可能会预先填充用户键入URL时使用“http://”的EditText。

检查您的url是否正确。对我来说,url前面有一个不需要的空格。

Kotlin回答:

val browserIntent = Intent(Intent.ACTION_VIEW, uri)
ContextCompat.startActivity(context, browserIntent, null)

我在Uri上添加了一个扩展,以使这更加容易

myUri.openInBrowser(context)

fun Uri?.openInBrowser(context: Context) {
    this ?: return // Do nothing if uri is null

    val browserIntent = Intent(Intent.ACTION_VIEW, this)
    ContextCompat.startActivity(context, browserIntent, null)
}

另外,这里有一个简单的扩展函数,可以将字符串安全地转换为Uri。

"https://stackoverflow.com".asUri()?.openInBrowser(context)

fun String?.asUri(): Uri? {
    return try {
        Uri.parse(this)
    } catch (e: Exception) {
        null
    }
}

kolin扩展函数。

 fun Activity.openWebPage(url: String?) = url?.let {
    val intent = Intent(Intent.ACTION_VIEW, Uri.parse(it))
    if (intent.resolveActivity(packageManager) != null) startActivity(intent)
}