首页 > 解决方案 > 无法从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 版本。

而在其他设备上一切正常。

我似乎无法弄清楚这里发生了什么。

标签: javascriptandroidhtmlwebviewandroid-webview

解决方案


我建议您使用Intent.ACTION_DIALACTION_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;
}

推荐阅读