【问题标题】:Android HTML Phone Link err_unknown_url_schemeAndroid HTML 电话链接 err_unknown_url_scheme
【发布时间】:2015-12-22 18:53:56
【问题描述】:

我正在使用 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 更新禁用了它。之前,单击链接会打开电话上的拨号器并开始拨打该号码。现在,另一个网页显示为标题为“网页不可用”并在正文中包含“无法加载位于 tel:123-456-7890 的网页,因为:net::ERR_UNKNOWN_URL_SCHEME”。

我已经在 Google 上进行了广泛的搜索,但仍不清楚解决方案。

这里讨论了这个问题:
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 页面是单个页面,不在框架集中,并且存储在手机本地。

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

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

如果在多个第三方浏览器中打开,将正常工作。但是,我正在这里寻找库存解决方案。

许多 cmets 似乎表明需要设置特殊权限,但甚至没有指示文件在哪里,我根本找不到它们,更不用说修改它们了。这让我想知道他们与权限相关的建议是否甚至是库存/无根 Android 设备上的一个选项。

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

感谢您的帮助。

【问题讨论】:

    标签: android


    【解决方案1】:
    import android.content.Intent;
    import android.net.Uri;
    

    ...

    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); 
    

    【讨论】:

    • 感谢您的回复。我真的不明白如何处理这段代码。它应该在我放置链接的 HTML 页面中的什么位置?它是否应该作为一个单独的文件保存为 JavaScript 的某种包含?这个怎么称呼?
    【解决方案2】:

    Android Webview 对 HTML5 的支持非常好。

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

    我在这里的第一个答案很容易解决了这个问题: https://stackoverflow.com/a/4339193/4937108

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 再次感谢您的回复。但是,我正在寻找一种专门在 Android WebView / HTML Viewer 中打开 HTML 页面并单击链接以打开拨号器的方法。我提到我的原始代码一直可以在其他浏览器中运行,但是,WebView 有几种方式与 Android 手机上的其他用户体验相关联,这些方式很重要,并引导我寻找解决 WebView 问题的方法切换到移动 FireFox 或其他东西。
      • 电话:可以在html5网页上使用。可能是应用禁用拨号。或者手机不支持html5
      【解决方案4】:

      Android Webview 对 HTML5 的支持非常好。

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

      我在这里的第一个答案很容易解决这个问题:https://stackoverflow.com/a/4339193/4937108

      【讨论】:

      • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效
      猜你喜欢
      • 2016-10-12
      • 2021-01-18
      • 2017-05-05
      • 2012-12-17
      • 2014-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多