当前位置:  开发笔记 > 编程语言 > 正文

如何从我的应用程序中在Android的Web浏览器中打开URL?

如何解决《如何从我的应用程序中在Android的Web浏览器中打开URL?》经验,为你挑选了12个好方法。

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

Mark B.. 2362

试试这个:

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;

我也可能预先填充用户使用"http://"键入URL的EditText.



1> Mark B..:

试试这个:

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;

我也可能预先填充用户使用"http://"键入URL的EditText.


`if(!url.startsWith("http://")&&!url.startsWith("https://"))`是一个常见错误,它可能会引导您访问http:// file:///等网址并打破一些好的用例.尝试用URI类解析uri并检查是否有架构.如果不是,请添加"http://";)
您需要使用[`resolveCheck`]进行空检查(https://developer.android.com/intl/ja/reference/android/content/Intent.html#resolveActivity(android.content.pm.PackageManager)).请参阅[官方文档](https://developer.android.com/intl/ja/guide/components/intents-common.html):**警告:如果设备上没有可以接收隐含意图的应用程序,当你调用startActivity()时,你的应用程序会崩溃.要首先验证应用程序是否存在以接收意图,请在Intent对象上调用resolveActivity().**
是的!它错过了http://!URL是由用户输入的,有没有办法自动格式化?
URLUtil是检查用户输入的"url"字符串的好方法
除了你的代码和mbaird是不一样的,我可以告诉我发布的是什么.确保您的URL具有`http://`方案 - 显示的例外表明您的URL缺少该方案.

2> Jorgesys..:

实现这一目标的常用方法是使用下一个代码:

String url = "http://www.stackoverflow.com";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url)); 
startActivity(i); 

可以改成短代码版本......

Intent intent = new Intent(Intent.ACTION_VIEW).setData(Uri.parse("http://www.stackoverflow.com"));      
startActivity(intent); 

要么 :

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

最短的!:

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

快乐的编码!



3> MikeNereson..:

在2.3中,我运气好了

final Intent intent = new Intent(Intent.ACTION_VIEW).setData(Uri.parse(url));
activity.startActivity(intent);

不同之处在于使用Intent.ACTION_VIEW而不是String"android.intent.action.VIEW"


根据Android Developer的说法:这个答案 - "用给定的动作创建一个意图.所有其他字段(数据,类型,类)都是空的." 和接受的答案 - "使用给定的操作和给定的数据URL创建意图."

4> itiskj..:
简单的答案

您可以在Android Developer中看到官方示例.

/**
 * Open a web page of a specified URL
 *
 * @param url URL to open
 */
public void openWebPage(String url) {
    Uri webpage = Uri.parse(url);
    Intent intent = new Intent(Intent.ACTION_VIEW, webpage);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}
这个怎么运作

请看一下构造函数Intent:

public Intent (String action, Uri uri)

您可以将android.net.Uri实例传递给第二个参数,并根据给定的数据URL创建新的Intent.

然后,只需调用startActivity(Intent intent)以启动一个新的Activity,它与给定URL的Intent捆绑在一起.

我需要if检查声明吗?

是.该文件说:

如果设备上没有可以接收隐式意图的应用,则当应用调用startActivity()时,您的应用会崩溃.要首先验证应用程序是否存在以接收意图,请在Intent对象上调用resolveActivity().如果结果为非null,则至少有一个应用程序可以处理意图,并且可以安全地调用startActivity().如果结果为null,则不应使用intent,如果可能,应禁用调用intent的功能.

奖金

您可以在创建Intent实例时在一行中编写,如下所示:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));


这假定提供的URL中有**http**.

5> nikki..:

试试这个:

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

或者如果您想在您的活动中打开Web浏览器,请执行以下操作:

WebView webView = (WebView) findViewById(R.id.webView1);
WebSettings settings = webview.getSettings();
settings.setJavaScriptEnabled(true);
webView.loadUrl(URL);

如果您想在浏览器中使用缩放控件,那么您可以使用:

settings.setSupportZoom(true);
settings.setBuiltInZoomControls(true);


请注意,在WebView中禁用了插件等,并且需要INTERNET权限.([参考](http://developer.android.com/reference/android/webkit/WebView.html))

6> Dmytro Danyl..:

如果你想向用户显示所有浏览器列表的对话,那么他可以选择首选,这里是示例代码:

private static final String HTTPS = "https://";
private static final String HTTP = "http://";

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

     if (!url.startsWith(HTTP) && !url.startsWith(HTTPS)) {
            url = HTTP + url;
     }

     Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
     context.startActivity(Intent.createChooser(intent, "Choose browser"));// Choose browser is arbitrary :)

}


如果有多个应用可以处理意图,系统会自动提供一个选择器,对吧?

7> android deve..:

就像其他人编写的解决方案(工作正常)一样,我想回答同样的问题,但我认为大多数人更愿意使用.

如果您希望应用程序开始在新任务中打开,而不是您自己的任务,而不是停留在同一堆栈上,您可以使用以下代码:

final Intent intent=new Intent(Intent.ACTION_VIEW,Uri.parse(url));
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY|Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET|Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
startActivity(intent);

还有一种方法可以在Chrome自定义标签中打开网址.Kotlin中的示例:

@JvmStatic
fun openWebsite(activity: Activity, websiteUrl: String, useWebBrowserAppAsFallbackIfPossible: Boolean) {
    var websiteUrl = websiteUrl
    if (TextUtils.isEmpty(websiteUrl))
        return
    if (websiteUrl.startsWith("www"))
        websiteUrl = "http://$websiteUrl"
    else if (!websiteUrl.startsWith("http"))
        websiteUrl = "http://www.$websiteUrl"
    val finalWebsiteUrl = websiteUrl
    //https://github.com/GoogleChrome/custom-tabs-client
    val webviewFallback = object : CustomTabActivityHelper.CustomTabFallback {
        override fun openUri(activity: Activity, uri: Uri?) {
            var intent: Intent
            if (useWebBrowserAppAsFallbackIfPossible) {
                intent = Intent(Intent.ACTION_VIEW, Uri.parse(finalWebsiteUrl))
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_NO_HISTORY
                        or Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET or Intent.FLAG_ACTIVITY_MULTIPLE_TASK)
                if (!CollectionUtil.isEmpty(activity.packageManager.queryIntentActivities(intent, 0))) {
                    activity.startActivity(intent)
                    return
                }
            }
            // open our own Activity to show the URL
            intent = Intent(activity, WebViewActivity::class.java)
            WebViewActivity.prepareIntent(intent, finalWebsiteUrl)
            activity.startActivity(intent)
        }
    }
    val uri = Uri.parse(finalWebsiteUrl)
    val intentBuilder = CustomTabsIntent.Builder()
    val customTabsIntent = intentBuilder.build()
    customTabsIntent.intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_NO_HISTORY
            or Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET or Intent.FLAG_ACTIVITY_MULTIPLE_TASK)
    CustomTabActivityHelper.openCustomTab(activity, customTabsIntent, uri, webviewFallback)
}


@TheOriginalAndroid只是为了让用户能够切换回你的应用程序,然后再回到网络浏览器.如果您打开最近任务屏幕,您将在此处看到2个任务而不是一个.此外,您不会在单个任务(属于您的应用程序的任务)中看到Web浏览器缩略图,而是会看到2:您的应用程序之一,以及另一个Web浏览器.我认为这种方式不那么令人困惑.

8> 小智..:

其他选项使用Webview在相同应用程序中加载URL

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



9> Aristo Micha..:

你也可以这样走

在xml中:



在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");

 }

}

在Manifest中别忘了添加互联网权限......



10> 小智..:

Webview可用于在您的应用程序中加载Url.可以在文本视图中从用户提供URL,也可以对其进行硬编码.

另外不要忘记AndroidManifest中的互联网权限.

String url="http://developer.android.com/index.html"

WebView wv=(WebView)findViewById(R.id.webView);
wv.setWebViewClient(new MyBrowser());
wv.getSettings().setLoadsImagesAutomatically(true);
wv.getSettings().setJavaScriptEnabled(true);
wv.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
wv.loadUrl(url);

private class MyBrowser extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
}



11> Jorgesys..:

短代码版本......

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


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



12> 小智..:

在您的try块中,粘贴以下代码,Android Intent直接使用URI(统一资源标识符)括号内的链接来识别链接的位置.

你可以试试这个:

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

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有