uniapp 在miui里调用uni.makephonecall失败是怎么回事?
在uniapp开发中,调用uni.makePhoneCall在MIUI系统上无法正常拨打电话,提示失败。其他Android系统和iOS都正常,只有MIUI会出现这个问题。请问这是什么原因导致的?有没有解决方法?MIUI的权限设置或者其他限制导致的吗?
2 回复
可能是MIUI系统权限问题。检查是否授权拨打电话权限,或尝试在manifest.json中配置拨号白名单。
在MIUI系统中,uni.makePhoneCall 调用失败通常是由于MIUI系统权限管理严格导致的。以下是常见原因及解决方案:
常见原因
- MIUI权限拦截:MIUI系统对电话权限有额外拦截机制,可能默认阻止拨号。
- 未授权电话权限:应用未获取
android.permission.CALL_PHONE权限。 - 号码格式错误:传入的号码包含非法字符或格式不正确。
- 系统限制:部分MIUI版本可能对非系统应用拨号功能有限制。
解决方案
-
检查权限配置:
- 在
manifest.json中确保已声明电话权限:{ "app-plus": { "permissions": [ "makePhoneCall" ] } } - 对于Android,还需在原生配置中声明(HBuilderX项目中通常自动处理)。
- 在
-
动态请求权限(Android):
- 在调用前检查并申请权限:
// 检查权限 uni.authorize({ scope: 'scope.phone', success: () => { uni.makePhoneCall({ phoneNumber: '123456789' }); }, fail: () => { uni.showModal({ content: '需要电话权限才能拨号,请授权', success: (res) => { if (res.confirm) { uni.openSetting(); // 引导用户开启权限 } } }); } });
- 在调用前检查并申请权限:
-
处理MIUI特殊设置:
- 提示用户在 MIUI安全中心 或 应用权限管理 中手动开启“拨打电话”权限。
- 路径示例:设置 → 应用管理 → 权限 → 电话 → 允许。
-
检查号码格式:
- 确保号码为纯数字(如
"10086"),无空格或特殊字符。
- 确保号码为纯数字(如
-
使用
tel:链接备用方案:uni.navigateTo({ url: 'tel:123456789' // 直接跳转系统拨号界面 });
注意事项
- 在部分MIUI版本中,即使授权,也可能需用户手动确认弹窗。
- 测试时使用真机,并确保MIUI系统为最新版本。
通过以上步骤,通常可解决MIUI中拨号失败的问题。如果问题持续,建议检查HBuilderX版本或提交详细日志至DCloud社区。

