如何从内置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

当前回答

试试看:

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。

其他回答

我认为这是最好的

openBrowser(context, "http://www.google.com")

将以下代码放入全局类

    public static void openBrowser(Context context, String url) {

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

        Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
        context.startActivity(browserIntent);
    }

短代码版本。。。

 if (!strUrl.startsWith("http://") && !strUrl.startsWith("https://")){
     strUrl= "http://" + strUrl;
 }


 startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(strUrl)));

Kotlin溶液

所有答案都是在该url的默认应用程序中打开该url。我想总是在浏览器中打开任何url。我需要一些kotlin的解决方案,并实现了下面的代码。

fun getPackageNameForUrl(context: Context, url: String): String? {
    val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
    val resolveInfo = context.packageManager.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY)
    return resolveInfo?.activityInfo?.packageName
}

fun openInBrowser(context: Context, url: String) {
    val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
    val packageName = getPackageNameForUrl(context, "http://")
    packageName?.takeIf { 
        it == "android" 
    }?.let { intent.setPackage(defaultBrowserPackageName); }
    startActivity(context, intent, null)
}

你也可以走这条路

在xml中:

<?xml version="1.0" encoding="utf-8"?>
<WebView  
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/webView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />

在java代码中:

public class WebViewActivity extends Activity {

private WebView webView;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.webview);

    webView = (WebView) findViewById(R.id.webView1);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.loadUrl("http://www.google.com");

 }

}

在清单中,不要忘记添加internet权限。。。

试试看:

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。