You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在React Native应用中直接发起电话呼叫(无需跳转拨号器)

在React Native中实现无需跳转系统拨号器的直接呼叫功能

Linking API和react-native-phone-call确实只能唤起系统拨号器,要实现直接发起呼叫,得针对iOS和Android分别做原生层面的处理,以下是可行方案:

Android 实现步骤

  1. 添加权限
    在android/app/src/main/AndroidManifest.xml里加入拨号权限:
<uses-permission android:name="android.permission.CALL_PHONE" />

Android 6.0+必须动态申请权限,仅静态声明无效。

  1. 用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 实现步骤

  1. 配置权限与后台模式
  • 在Info.plist中添加权限描述:
<key>NSMicrophoneUsageDescription</key>
<string>通话需要使用麦克风</string>
  • 打开Xcode,在项目的Signing & Capabilities里开启Background Modes,勾选Voice over IP。
  1. 使用react-native-callkeep发起呼叫
    和Android端类似,初始化后调用startCall即可,iOS会直接发起呼叫,不会跳转拨号器。

自定义原生模块(不依赖第三方库)

如果不想用第三方库,可以自己写原生代码:

  • Android:写一个原生方法,调用Intent.ACTION_CALL(别用ACTION_DIAL,后者会打开拨号器),同时处理动态权限请求。
  • iOS:使用CXCallController框架发起VoIP呼叫,需要配置对应的权限和后台模式。

重要提醒

  • 直接发起呼叫可能违反应用商店审核规则,提交前务必确认平台政策。
  • 必须严格处理权限请求,否则应用会崩溃或被拒。
  • 一定要在真机上测试,模拟器无法模拟真实呼叫流程。

内容的提问来源于stack exchange,提问作者Rohit Nandagawali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 14:43:20