javascript - 无法从 android webview 内的网页进行语音通话

标签 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);
    }
<小时/>

ma​​kePhoneCall()

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 和 Android Oreo。

我检查过 Android 版本,大多数设备都有 6+ Android 版本。

  • 我在 onCreate() 创建的不同线程上运行 webView;

在其他设备上一切正常。

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

最佳答案

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

关于javascript - 无法从 android webview 内的网页进行语音通话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55292916/

相关文章:

javascript - Safari 剪贴板错误 "TypeError: undefined is not an object"

具有灵活高度的ListView中的Android自定义行布局

html - 将链接列表右对齐

javascript - 具有多个字符的css字间距

css - 如何更改 MVVM 中网格列的颜色?

javascript - 具有单个系列、可变条形颜色和图例的 Jqplot

javascript - 错误!缺少脚本 : Start when deploying to heroku

javascript - MySQL查询后无法运行js命令

android - Material 组件底部导航 View

java - 无法将 HttpURLConnection 方法切换为 POST