javascript - 无法从android webview中的网页拨打语音电话
问题描述
我有一个带有 webView 的应用程序,它加载了一个联系人详细信息列表,用户可以通过单击该号码来拨打语音电话。在网页中使用了tel:标签。以下是我编写的代码。
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
final Uri uri = request.getUrl();
if (uri.toString().startsWith("tel:"))
makePhoneCall(uri.toString());
return super.shouldOverrideUrlLoading(view, request);
}
拨打电话()
public void makePhoneCall(String phoneNumber) {
if (ContextCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE}, REQUEST_CALL);
checkPermissions();
} else {
startActivity(new Intent(Intent.ACTION_CALL, Uri.parse(phoneNumber)));
}
}
问题是..
在许多设备上安装后,在某些设备上,用户无法拨打电话,点击号码后没有任何反应。我确信触摸事件正在发生,因为单击数字后 5 秒会出现一个弹出窗口,它工作正常。
其中一些设备是诺基亚、华硕 Zenfone Max 和安卓奥利奥。
我检查了大多数设备都有 6+ android 版本的 android 版本。
- 我在从 onCreate() 创建的不同线程上运行 webView;
而在其他设备上一切正常。
我似乎无法弄清楚这里发生了什么。
解决方案
我建议您使用Intent.ACTION_DIAL
ACTION_CALL 而不是 ACTION_CALL,在使用 ACTION_DIAL 时,您的应用程序不需要呼叫权限,它只会打开您的拨号器,其中已经输入了号码,并允许用户决定他们是否真的想打电话。
@Override
public boolean shouldOverrideUrlLoading(WebView view, String Url) {
if (Url.startsWith("tel:")) {
Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(Url));
startActivity(intent);
return true;
}
return false;
}
推荐阅读
- python - 除了 python 正则表达式中字符类的一部分
- c# - 从执行 TcpClient 连续读取的 while 循环内部在富文本框中附加文本
- java - 设置 JSpinnerModel 时,JSpinner 文本字段被停用
- spring-mvc - 如何在 Spring 中使用 Kotlinx.html 代替 JSP 或 Thymeleaf 的普通 html 模板引擎?
- python - Python dict不返回属性
- jquery - jQuery DataTables 插件修复了被覆盖的标题
- python - Python:从旧列表以新序列创建新列表,包含两部分
- powershell - 计算机的动态 AD 组成员身份
- php - PHP push_array 对象显示相同的值
- brute-force - 16 位长整数的蛮力素数检查