如何处理Android webview中的intet://链接

时间:2015-09-20 08:15:58

标签: android android-intent webview

我正在尝试打开http://链接,它将对Blackboard Collaborate的SSO逻辑进行单点登录。

该链接将检查身份验证,如果我已通过身份验证,则会转发我以打开该应用。

在Chrome浏览器中,它工作正常,因为它会将我重定向到我设备上安装的Blackboard应用程序。

问题是当我尝试在我的应用程序内打开WebView中的http://链接时。 http://链接被重定向到另一个http://链接,然后将重定向到 intent:// 链接。在这种情况下,WebView显示错误消息(无法找到主机名意图://blah.blah.blah)

这是我的代码,我正在尝试为'intent://'架构设置一个例外来做其他事情。但我不知道该怎么办!

public class MyWebViewClient extends WebViewClient {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {

            // Open Blackboard app
            if (url != null && url.startsWith("intent://")) {
                Log.d("AG_LOG", "intent:// found");
                Intent intent = new Intent();
                intent.setData(Uri.parse(url));
                view.getContext().startActivity(intent);
                return true;
            } else {
                view.loadUrl(url, headers);
                view.setWebChromeClient(new MyChromeClient());
                view.setWebViewClient(new MyWebViewClient());
                return false;
            }
        }
    }

我尝试过Intent.ACTION_VIEW但没有奏效!

1 个答案:

答案 0 :(得分:2)

最后我得到了解决方案:)

public class MyWebViewClient extends WebViewClient {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {

            // Open Blackboard app
            if (url != null && url.startsWith("intent://")) {
                Log.d("AG_LOG", "intent:// found");
                try {
                    Intent sessionIntnet = Intent.parseUri(url, Intent.URI_INTENT_SCHEME); // Here the MAGIC
                    sessionIntnet.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
                    view.getContext().startActivity(sessionIntnet);
                } catch (URISyntaxException e) {
                    e.printStackTrace();
                    Toast.makeText(MyActivity.this, "Unable to open app!", Toast.LENGTH_LONG).show();
                }
                return true;
            } else {
                view.loadUrl(url, headers);
                view.setWebChromeClient(new MyChromeClient());
                view.setWebViewClient(new MyWebViewClient());
                return false;
            }
        }
    }

新意图是使用Intent.ParseUri()解析意图的结果,并将Intent.URI_INTENT_SCHEME作为第二个参数传递。