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

React Native集成react-native-activity-recognition遇NativeEventEmitter报错求助

解决React Native 0.70.1 + Hermes集成react-native-activity-recognition的报错问题

报错分析

核心错误是Invariant Violation: new NativeEventEmitter() requires a non-null argument.,这说明react-native-activity-recognition的原生模块未正确注册到React Native环境中,进而引发后续的AppRegistry初始化失败问题。

解决方案

1. 确认原生模块链接状态

React Native 0.60+支持自动链接,但部分场景下可能失效,需手动验证:

  • Android端:

    • 打开android/settings.gradle,确认包含以下代码:
      include ':react-native-activity-recognition'
      project(':react-native-activity-recognition').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-activity-recognition/android')
      
    • 打开android/app/build.gradle,确认dependencies块中存在:
      implementation project(':react-native-activity-recognition')
      
    • 检查MainApplication.java的getPackages()方法,是否添加了new ActivityRecognitionPackage()(自动链接会自动添加,若缺失则手动补充)。
  • iOS端:

    • 打开ios/Podfile,确认包含:
      pod 'react-native-activity-recognition', :path => '../node_modules/react-native-activity-recognition'
      
    • 执行cd ios && pod install --repo-update重新安装依赖。
    • 检查AppDelegate.m,确认已导入模块并注册(自动链接完成后无需手动操作,若异常可手动添加)。

2. 验证库版本兼容性

确认你安装的react-native-activity-recognition版本支持React Native 0.70.1:

  • 查看库的package.json中的peerDependencies,若版本范围不包含0.70.x,尝试升级库到最新兼容版本:
    npm install react-native-activity-recognition@latest
    # 或 yarn add react-native-activity-recognition@latest
    

3. 修复useEffect的清理函数写法

你的代码中清理函数存在错误,当前写法会在组件挂载时立即调用ActivityRecognition.stop(),而非组件卸载时执行。修改为:

useEffect(() => {
  const subscription = ActivityRecognition.subscribe(detectedActivities => {
    const mostProbableActivity = detectedActivities.sorted[0];
    console.log(mostProbableActivity);
  });
  
  return () => {
    ActivityRecognition.stop();
    subscription?.remove(); // 若库支持取消订阅,建议同时调用
  };
}, []); // 添加空依赖数组,确保仅挂载时执行一次

4. 清理React Native缓存

缓存问题可能导致模块未正确加载,执行以下命令清理:

# 清除RN打包缓存
npm start --reset-cache

# Android端额外清理
cd android && ./gradlew clean

# iOS端额外清理
cd ios && rm -rf Pods Podfile.lock && pod install
rm -rf ~/Library/Developer/Xcode/DerivedData

5. 检查权限配置

确保已在原生项目中添加了活动识别所需的权限:

  • Android:在AndroidManifest.xml中添加:
    <uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />
    
  • iOS:在Info.plist中添加:
    <key>NSMotionUsageDescription</key>
    <string>需要访问您的活动数据以追踪运动状态</string>
    

内容的提问来源于stack exchange,提问作者Lakpriya Senevirathna

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:55:35