如何在React Native应用中直接发起电话呼叫(无需跳转拨号器)
在React Native中实现无需跳转系统拨号器的直接呼叫功能
Linking API和react-native-phone-call确实只能唤起系统拨号器,要实现直接发起呼叫,得针对iOS和Android分别做原生层面的处理,以下是可行方案:
Android 实现步骤
- 添加权限
在android/app/src/main/AndroidManifest.xml里加入拨号权限:
<uses-permission android:name="android.permission.CALL_PHONE" />
Android 6.0+必须动态申请权限,仅静态声明无效。
- 用
react-native-callkeep发起呼叫
这个库支持直接调用系统拨号API,绕开拨号器界面。安装完成后,代码示例:
import CallKeep from 'react-native-callkeep'; // 初始化配置 CallKeep.setup({ android: { alertTitle: '请求拨打电话权限', alertDescription: '应用需要权限才能直接发起呼叫', cancelButton: '取消', okButton: '允许', }, }); // 直接呼叫函数 const makeDirectCall = async (phoneNumber) => { try { // 检查并申请权限 const hasPermission = await CallKeep.hasPhoneCallPermission(); if (!hasPermission) { const granted = await CallKeep.requestPhoneCallPermission(); if (!granted) { console.log('用户拒绝了权限'); return; } } // 发起呼叫 await CallKeep.startCall(phoneNumber, phoneNumber); } catch (err) { console.error('呼叫失败:', err); } };
iOS 实现步骤
- 配置权限与后台模式
- 在
Info.plist中添加权限描述:
<key>NSMicrophoneUsageDescription</key> <string>通话需要使用麦克风</string>
- 打开Xcode,在项目的
Signing & Capabilities里开启Background Modes,勾选Voice over IP。
- 使用
react-native-callkeep发起呼叫
和Android端类似,初始化后调用startCall即可,iOS会直接发起呼叫,不会跳转拨号器。
自定义原生模块(不依赖第三方库)
如果不想用第三方库,可以自己写原生代码:
- Android:写一个原生方法,调用
Intent.ACTION_CALL(别用ACTION_DIAL,后者会打开拨号器),同时处理动态权限请求。 - iOS:使用
CXCallController框架发起VoIP呼叫,需要配置对应的权限和后台模式。
重要提醒
- 直接发起呼叫可能违反应用商店审核规则,提交前务必确认平台政策。
- 必须严格处理权限请求,否则应用会崩溃或被拒。
- 一定要在真机上测试,模拟器无法模拟真实呼叫流程。
内容的提问来源于stack exchange,提问作者Rohit Nandagawali
相关产品推荐
相关产品推荐

