我有一个带有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。
在其他设备上,一切正常。
我似乎无法弄清楚这里发生了什么。
答案 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)