在Web视图中单击链接时检测自定义URL

时间:2018-03-25 07:31:24

标签: android webview observers

在我的Android应用程序中,必须使用API​​级别23到27,我会使用正确的网站URL显示Web视图。当页面加载时,我能够观察" shouldOverrideUrlLoading,onPageStarted和onPageFinished"成功。
但在我的网站上,有一个必须在我的应用中处理的自定义网址。我的自定义网址类似于" tvloc:// lat:123.45,lng:456.78"。当我在网页视图中点击自定义网址链接时,它不会呼叫任何观察者
如何解决问题以检测自定义URL。这是我的代码:

        client = new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            Log.v(TAG, "shouldOverrideUrlLoading -> " + url);
            return checkURL(url);
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            String url = request.getUrl().toString();
            return checkURL(url);
        }

        private boolean checkURL(String url) {
            Log.v(TAG, "shouldOverrideUrlLoading -> " + url);
            if (url.startsWith(urlPrefix)) {

                return true;
            }

            return false;
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
            Log.v(TAG, "onPageStarted -> " + url);
            if (!progressDialog.isShowing()) {
                progressDialog.show();
            }
        }

        @SuppressLint("JavascriptInterface")
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);

            if (progressDialog.isShowing()) {
                progressDialog.dismiss();
            }

            Log.v(TAG, "onPageFinished -> " + url);
        }
    };

    webView.setWebViewClient(client);

1 个答案:

答案 0 :(得分:0)

WebView可能无法检测到" tvloc:// lat:123.45,lng:456.78"作为一个URL。尝试更改为" http://tvloc=lat:123.45,lng:456.78"。