为什么我无法点击Android WebView中的电话号码?

时间:2015-02-24 22:10:11

标签: javascript android webview

我关注this tutorial. 我正在为我的一个域制作一个Android应用程序,它是一个非常基本的查看器,显示主页,用户可以导航到应用程序内的其他页面(而不是弹出窗口,要求他们使用巫婆浏览器)但是,我也有网站中的电话号码作为链接,例如在this .tel page中,您可以将鼠标悬停在上面并查看calto:xxxxx,当我在浏览器中点击手机时,它会根据我的意愿为我提供拨号。当我在我的webview应用程序上点击它时,它也会通过调出拨号应用程序来工作。

但是在实现以下代码以打开应用程序内的所有页面和链接后,它不起作用。它在应用程序内部给我一条消息,因为我无法打开它

// Force links and redirects to open in the WebView instead of in a browser
mWebView.setWebViewClient(new WebViewClient());

所以我用这个来制作其他请求的域名(我也希望电话号码)在另一个应用程序,浏览器中打开(也期待拨号应用程序),它适用于其他网站,但是当我点击手机时数字它只给我这个错误并强制关闭应用程序

public class MyAppWebViewClient extends WebViewClient {
        
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if(Uri.parse(url).getHost().endsWith("html5rocks.com")) {
                return false;
            }
             
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            view.getContext().startActivity(intent);
            return true;
        }
    }

错误

02-24 18:56:20.065  15423-15423/com.clicnet.bandeirantestel A/chromium﹕ [FATAL:jni_android.cc(271)] Check failed: false.
02-24 18:56:20.075  15423-15423/com.clicnet.bandeirantestel A/libc﹕ Fatal signal 6 (SIGABRT), code -6 in tid 15423 (bandeirantestel)
我尝试在棒棒糖和ics上运行它,但结果是相同的

任何帮助表示赞赏 感谢

1 个答案:

答案 0 :(得分:0)

我用这个

解决了

public boolean shouldOverrideUrlLoading(WebView view, String url)
       {Uri query_string=Uri.parse(url);
        String query_scheme=query_string.getScheme();
        String query_host=query_string.getHost();
        if ((query_scheme.equalsIgnoreCase("https") || query_scheme.equalsIgnoreCase("http"))
            && query_host!=null // && query_host.equalsIgnoreCase(Uri.parse(URL_SERVER).getHost())
            && query_string.getQueryParameter("new_window")==null
           )
           {return false;//handle the load by webview
           }
        try
           {Intent intent=new Intent(Intent.ACTION_VIEW, query_string);
            String[] body=url.split("\\?body=");
            if (query_scheme.equalsIgnoreCase("sms") && body.length>1)
               {intent=new Intent(Intent.ACTION_VIEW, Uri.parse(body[0]));
                intent.putExtra("sms_body", URLDecoder.decode(body[1]));
               }
            view.getContext().startActivity(intent);//handle the load by os
           }
        catch (Exception e) {}
        return true;
       }

这是第一个解决方案here的编辑版本(我在打开此问题之前尝试过)并注意到我如何评论它将排除我的主页的部分,这样它将打开WebView中的所有页面