Android HTML手机链接err_unknown_url_scheme

时间:2015-09-25 02:14:37

标签: android

我正在使用5.5.1 / Lollipop实现看似极其简单的Nexus 5解决方案,但有困难。我希望直接在手机上存储本地HTML页面,以保存大量参考电话号码:

<a href="tel:123-456-7890">Call Harold's Chicken Shack</a>
<a href="tel:234-567-8901">Call In n' Out Burger</a>

这曾经没有任何问题,但今年早些时候Android更新禁用了它。之前,单击该链接将打开手机上的拨号器并开始拨打该号码。现在,另一个网页显示标题为“网页不可用”,并且包含“无法加载电话:123-456-7890的网页,因为:net :: ERR_UNKNOWN_URL_SCHEME”在正文中。

我已经广泛搜索了这个,但仍然不清楚解决方案。

此问题在此处讨论:
Getting net::ERR_UNKNOWN_URL_SCHEME while calling telephone number from HTML page in Android
但是关于该问题的所有回答似乎都不正确或描述了未被引用的解决方案。

有些人建议对电话号码进行各种格式更改:

<a href="tel:123-456-7890">Call Harold's Chicken Shack</a>
<a href="tel:1234567890">Call Harold's Chicken Shack</a>
<a href="tel:+123-456-7890">Call Harold's Chicken Shack</a>
<a href="tel:+1234567890">Call Harold's Chicken Shack</a>

但是,问题似乎不受连字符或+符号的影响。

接下来,有人建议为链接设置目标:

<a href="tel:123-456-7890">Call Harold's Chicken Shack</a>
<a href="tel:123-456-7890" target="_blank">Call Harold's Chicken Shack</a>

这对我的测试没有任何影响。似乎有些人认为如果正在使用的HTML页面在框架中,这将起作用。为了清楚起见,我使用的HTML页面是一个页面,不在框架集内,并存储在手机本地。

有些评论似乎在讨论不同的浏览器。我的目标是Android 5.5.1 / Lollipop WebView / HTML Viewer。我实际上可以确认原始代码:

<a href="tel:123-456-7890">Call Harold's Chicken Shack</a>
如果在许多第三方浏览器中打开,

将正常工作。但是,我在这里寻求股票解决方案。

许多评论似乎都表明需要设置特殊权限,但是没有迹象表明文件的位置,我根本无法找到它们,更不用说修改它们了。这让我想知道他们的权限相关建议是否是股票/无根Android设备上的一个选项。

总而言之,如果你想在Android手机上有一个LOCALLY存储的HTML页面(不是脚本,不是应用程序,甚至不是运行JavaScript或其他东西的HTML页面,只有一个简单的本地HTML页面一个“a href =”链接,当点击时会将电话号码放入拨号器......)如何做到这一点?

感谢您的协助。

4 个答案:

答案 0 :(得分:4)

     mWebView = (WebView) findViewById(R.id.web_view); 

WebSettings webSettings = mWebView.getSettings(); 
webSettings.setJavaScriptEnabled(true); 

mWebView.setWebViewClient(new WebViewClient(){
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if( url.startsWith("http:") || url.startsWith("https:") ) {
            return false; 
        } 

        // Otherwise allow the OS to handle things like tel, mailto, etc. 
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
        startActivity( intent );
        return true; 
    } 
}); 
mWebView.loadUrl(url); 

答案 1 :(得分:1)

Android Webview非常支持HTML5。

您必须将网址彼此分开。 我有同样的问题,并想知道,为什么这种链接会触发手机。 Webview.shouldOverrideUrlLoading方法不适合你,所以只需编写一个if语句来捕获tel:-url。

我在第一个答案中轻松解决了这个问题: https://stackoverflow.com/a/4339193/4937108

答案 2 :(得分:0)

我犯了一个错误。我可以用android 5.1.1在浏览器中打开拨号。 也许你可以使用其他浏览器!

答案 3 :(得分:0)

Android Webview非常支持HTML5。

您必须将网址彼此分开。我有同样的问题,并想知道,为什么这种链接会触发手机。 Webview.shouldOverrideUrlLoading方法不适合你,所以只需编写一个if语句来捕获tel:-url。

我在第一个答案中轻松解决了这个问题:https://stackoverflow.com/a/4339193/4937108