无法从android webview内的网页拨打语音电话

时间:2019-03-22 04:26:54

标签: javascript android html webview 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);
    }

makePhoneCall()

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秒钟出现了一个弹出窗口,效果很好。

其中一些设备是诺基亚,装有Android Oreo的华硕Zenfone Max。

我已经检查了android版本,大多数设备的android版本都超过6。

  • 我正在从onCreate()创建的另一个线程上运行webView。

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

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

3 个答案:

答案 0 :(得分:1)

有时候,当只有具有最新android版本的特定设备出现问题时,您才尝试为所有内容提供运行时权限,这在某种程度上与运行时权限和版本兼容性有关。

答案 1 :(得分:1)

我建议您使用Intent.ACTION_DIAL而不是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;
}

答案 2 :(得分:1)

以上两个答案都是正确的。 帕特尔先生的 answer说是由于运行时权限错误引起的。但是,即使在处理完之后,某些设备仍然存在问题。

因此,我尝试了 user11185229的 answer,并且运行正常。