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

使用react-native callkeep遇Android版本不支持ConnectionService错误求助

解决React Native CallKeep的"ConnectionService not available for this version of Android"错误

这个错误我之前帮不少开发者排查过,核心问题大多和Android版本兼容性、权限配置或者CallKeep的初始化设置有关,结合你贴的代码,我整理几个靠谱的解决方向:


1. 先确认测试设备的Android系统版本

CallKeep的ConnectionService特性是从**Android 8.0(API级别26)**开始支持的,如果你的测试设备/模拟器系统版本低于这个,必然会触发这个错误。

  • 先检查设备系统版本,如果低于8.0,要么升级系统,要么考虑用旧版本的CallKeep(比如v4.x及以下,不过旧版本功能有限),或者针对低版本做降级适配。

2. 补全AndroidManifest.xml的权限与组件声明

你的代码里只配置了权限提示弹窗,但CallKeep需要在AndroidManifest.xml里添加关键权限和组件注册,不然系统不会允许应用访问ConnectionService:

  • 先在<manifest>标签下添加这些权限:
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission android:name="android.permission.BIND_TELECOM_CONNECTION_SERVICE" />
    <uses-permission android:name="android.permission.READ_CALL_LOG" />
    <uses-permission android:name="android.permission.WRITE_CALL_LOG" />
    
  • 然后在<application>标签内注册ConnectionService组件:
    <service 
      android:name="io.wazo.callkeep.RNCallKeepConnectionService"
      android:permission="android.permission.BIND_TELECOM_CONNECTION_SERVICE">
      <intent-filter>
        <action android:name="android.telecom.ConnectionService" />
      </intent-filter>
    </service>
    

3. 完善CallKeep的初始化配置

部分版本的CallKeep需要显式配置accountName参数,不然会导致ConnectionService初始化失败,你可以修改你的options试试:

const options = { 
  ios: { appName: 'My app name', }, 
  android: { 
    alertTitle: 'Permissions required', 
    alertDescription: 'This application needs to access your phone accounts', 
    cancelButton: 'Cancel', 
    okButton: 'ok',
    accountName: 'My app name', // 添加这个参数
    //imageName: 'phone_account_icon', 
    //additionalPermissions: [PermissionsAndroid.PERMISSIONS.example] 
  } 
}; 

另外,建议在调用setup之前手动请求必要的运行时权限,避免自动弹窗的权限请求出现异常:

import { PermissionsAndroid } from 'react-native';

const requestCallPermissions = async () => {
  const requiredPermissions = [
    PermissionsAndroid.PERMISSIONS.READ_PHONE_STATE,
    PermissionsAndroid.PERMISSIONS.CALL_PHONE,
    PermissionsAndroid.PERMISSIONS.FOREGROUND_SERVICE,
  ];

  const permissionResults = await PermissionsAndroid.requestMultiple(requiredPermissions);
  // 检查所有权限是否都被授予
  return Object.values(permissionResults).every(result => result === PermissionsAndroid.RESULTS.GRANTED);
};

// 先请求权限,再初始化CallKeep
requestCallPermissions().then(allGranted => {
  if (allGranted) {
    RNCallKeep.setup(options).then(accepted => {console.log(accepted)});
  } else {
    console.log('部分权限未授予,CallKeep无法正常工作');
  }
});

4. 清理缓存重新构建

有时候旧的构建缓存会导致新配置不生效,试试这些步骤:

  • 清理React Native缓存:npx react-native start --reset-cache
  • 进入Android目录清理构建缓存:cd android && ./gradlew clean
  • 重新运行项目:npx react-native run-android

内容的提问来源于stack exchange,提问作者shikha Gupta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 11:17:31