首页 文章

如何在Android上的注册应用程序中从我的WebView中启动Web链接?

提问于
浏览
2

在我的Android应用程序中,我有一个WebView . 我希望在我的WebView中单击 every 链接以在我的设备上启动已注册的应用程序(如果有),否则在外部浏览器中打开 . 例如,如果用户从WebView中点击Facebook页面链接,它应该启动Facebook应用程序(如果Facebook在设备上注册以处理Facebook链接) . 如果没有注册app,它应该启动外部浏览器(即,它不应该在同一个WebView中加载页面) .

目前(默认情况下),WebView只会加载在WebView内单击的任何链接 .

我意识到我需要覆盖shouldOverrideUrlLoading来拦截这些链接点击:

webView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        // what should go here to trigger the registered app or fall back to external browser for all link clicks in the WebView?
    }
});

我也查看了intent过滤器,但这似乎与此要求相反(intent过滤器似乎是我注册 my android app来处理其他地方的web点击的一种方式) .

Update 1

我不打算拦截任何特定的主机名或方案 - 我希望在我的网页视图中点击的每个链接都是'delegated'到android,其中android决定是否启动已注册的应用程序,弹出用户选择哪个应用程序的选项根据用户设置打开或在Web浏览器中打开 .

具体来说,如果我点击链接到https://www.facebook.com/blah它应该在Facebook应用程序中启动并带我到那里的blah页面 .

2 回答

  • 0

    可以在Android中打开点击网络链接的应用程序,我们已经看到许多应用程序已经这样做了 . 您可以在 WebBrowserActivity 应用程序中注册 hostUri 方案,当用户点击外部应用程序的任何链接时,如果主机名和Uri方案与您注册的方案匹配,则会打开您的应用程序 . 正如开发人员文档所说,您应该知道超链接的主机和方案,任何随机链接都不会打开您的应用程序 .

    礼貌:https://developer.android.com/training/app-links/index.html

    我相信,从应用程序的WebView打开一个特定的活动应该只使用IntentFilters来完成 .

  • 3

    修复只涉及处理shouldOverrideUrlLoading为true,如果url不在我自己的应用程序中,则返回true . 返回true时,它会启动已注册的应用程序或应用程序选择器对话框或浏览器,具体取决于配置的上下文 .

    mWebview.setWebViewClient(new WebViewClient()
        {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                boolean isLocalUrl = false;
                try {
                    URL givenUrl = new URL(url);
                    String host = givenUrl.getHost();
                    if(host.contains("myapp.com"))
                        isLocalUrl = true;
    
                } catch (MalformedURLException e) {
    
    
                }
                if (isLocalUrl)
                    return super.shouldOverrideUrlLoading(view, url);
                else
                {
                    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                    startActivity(intent);
                    return true;
                }
            }
        }
    

    我也意识到Android上的当前状态(我在小米Mi 4上的MIUI 7测试,基于Android Kitkat,但论坛表明这对于大多数前Marshmallow机器人来说至少是这样),其中有一个指向facebook页面的链接WebView无法在Facebook应用中打开 . 它也没有为用户提供在Facebook应用程序中打开的选项 . 这曾经比较早,但现在不起作用 . 如果我们使用上面的代码,它总是在浏览器中启动 . 由于这个原因,发生了很多误解 . 它与其他网站(推特,广告等)一样有效 .

相关问题