【发布时间】:2018-12-11 05:10:35
【问题描述】:
使用 Progressive Web App,我可以检索手机的电话号码吗?我猜肯定不会 - 但也许如果网络浏览器可以要求用户访问,用户可以让浏览器访问手机号码?
此问题专门针对 Android 手机。
如果网页只有一个“复制电话号码”的按钮,并且可以在相应的字段中填写用户的电话号码,那就太棒了。
【问题讨论】:
标签: android mobile progressive-web-apps
使用 Progressive Web App,我可以检索手机的电话号码吗?我猜肯定不会 - 但也许如果网络浏览器可以要求用户访问,用户可以让浏览器访问手机号码?
此问题专门针对 Android 手机。
如果网页只有一个“复制电话号码”的按钮,并且可以在相应的字段中填写用户的电话号码,那就太棒了。
【问题讨论】:
标签: android mobile progressive-web-apps
如果您只关注 Android,请查看Contact Picker API。在撰写本文时,它仅适用于 Chrome 77+ 和 Android M 或更高版本。
我认为您不能使用此 API 设置“复制电话号码”按钮,因为设备用户必须明确选择要共享的信息,但 用户可以简单地从手机联系人中选择自己的号码列出并继续。
【讨论】:
确实很棒,但 PWS 不与所有者信息交互,您可以触发不同的事件,当涉及到相机、位置和几乎任何可以与硬件和顶级交互的“侵入性”功能时,这些事件可能需要许可软件架构,但据我所知,只有原生应用程序具有与用户信息、联系人等交互的能力;
您可以创建一个模式以在对方不在时不断地向对方拨打电话号码,或者创建一个设置向导以在启动时运行,这需要电话号码;但出于明显的安全原因,以编程方式访问设备并在 PWS/网站应用程序中获取号码几乎是不可能的。
【讨论】:
您可以在 Android 上实现 JavascriptInterface。
看看这个答案。
基于此,您可以编写如下代码:
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 版本,则需要实现权限请求。 希望对你有帮助。
【讨论】: