【问题标题】:Using a Progressive Web App, can I retrieve the phone number of a mobile phone使用 Progressive Web App,我可以检索手机的电话号码吗
【发布时间】:2018-12-11 05:10:35
【问题描述】:

使用 Progressive Web App,我可以检索手机的电话号码吗?我猜肯定不会 - 但也许如果网络浏览器可以要求用户访问,用户可以让浏览器访问手机号码?

此问题专门针对 Android 手机。

如果网页只有一个“复制电话号码”的按钮,并且可以在相应的字段中填写用户的电话号码,那就太棒了。

【问题讨论】:

    标签: android mobile progressive-web-apps


    【解决方案1】:

    如果您只关注 Android,请查看Contact Picker API。在撰写本文时,它仅适用于 Chrome 77+ 和 Android M 或更高版本。

    我认为您不能使用此 API 设置“复制电话号码”按钮,因为设备用户必须明确选择要共享的信息,但 用户可以简单地从手机联系人中选择自己的号码列出并继续。

    【讨论】:

      【解决方案2】:

      确实很棒,但 PWS 不与所有者信息交互,您可以触发不同的事件,当涉及到相机、位置和几乎任何可以与硬件和顶级交互的“侵入性”功能时,这些事件可能需要许可软件架构,但据我所知,只有原生应用程序具有与用户信息、联系人等交互的能力;

      您可以创建一个模式以在对方不在时不断地向对方拨打电话号码,或者创建一个设置向导以在启动时运行,这需要电话号码;但出于明显的安全原因,以编程方式访问设备并在 PWS/网站应用程序中获取号码几乎是不可能的。

      【讨论】:

        【解决方案3】:

        您可以在 Android 上实现 JavascriptInterface。

        看看这个答案。

        https://es.stackoverflow.com/questions/127574/javascript-interface-android-webview-call-java-function-from-js-onclick

        基于此,您可以编写如下代码:

        JavaScriptInterface jsInterface = new JavaScriptInterface();
        myWebView.addJavascriptInterface(jsInterface, "Android");
        

        您的方法,以及基于另一个问题:

        Programmatically obtain the phone number of the Android phone

        public class JavaScriptInterface {
        
            @JavascriptInterface
            public void getPhoneNumber() {
             // Code to get phone number on android
             TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
             String phoneNumber = tMgr.getLine1Number();
        
            }
        
        }
        

        在网络上:

        <a href="#" onclick="getPhoneNumber()">getMyNumber</a>
        

        您也可以向 webview 发送响应。请参阅本教程。它在 Koltin 中,但如果你需要制作它,你可以在 java 上编写它。

        https://medium.com/@elye.project/making-android-interacting-with-web-app-921be14f99d8

        基于此,您可以编写如下代码:

        myWebView.loadUrl("javascript: " +"returnPhoneNumber(\"" + phoneNumber + "\")", null);
        

        你需要一个名为“returnPhoneNumber”的 js 函数

        不要忘记在清单中添加权限:

        <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
        

        如果您使用的是较新的 Android 版本,则需要实现权限请求。 希望对你有帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-02
          相关资源
          最近更新 更多