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

Windows开发React Native安卓应用:@react-native-voice调用失败求助

解决@react-native-voice调用startSpeech等方法提示undefined问题

1. 确认包的正确导入与初始化

不管是原生RN还是Expo项目,必须确保模块初始化完成后再调用方法,避免因原生模块未加载导致的undefined错误:

import Voice from '@react-native-voice/voice';
import { useEffect, useState } from 'react';
import { Button, Text } from 'react-native';

const SpeechRecorder = () => {
  const [transcript, setTranscript] = useState('');

  useEffect(() => {
    // 组件挂载后注册监听事件
    Voice.onSpeechResults = (event) => {
      setTranscript(event.value[0]);
    };

    // 组件卸载时清理资源
    return () => {
      Voice.destroy().catch(console.error);
    };
  }, []);

  const startRecording = async () => {
    try {
      await Voice.start('zh-CN'); // 指定对应语言代码
    } catch (err) {
      console.error('启动录音失败:', err);
    }
  };

  const stopRecording = async () => {
    try {
      await Voice.stop();
    } catch (err) {
      console.error('停止录音失败:', err);
    }
  };

  return (
    <>
      <Button title="开始录音" onPress={startRecording} />
      <Button title="停止录音" onPress={stopRecording} />
      <Text>识别结果:{transcript}</Text>
    </>
  );
};

export default SpeechRecorder;

2. 原生RN项目(npx react-native init创建)配置检查

Windows开发安卓需确保安卓端配置完整:

  • 打开android/app/src/main/AndroidManifest.xml,添加必要权限:
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" /> <!-- 部分语音识别需联网支持 -->
  • 执行npx react-native link @react-native-voice/voice确保模块链接完成(RN 0.60+自动链接,但手动执行可避免异常)
  • 清理安卓构建缓存:删除android/build、android/app/build文件夹,进入android目录执行./gradlew clean,再重新打包安装

3. Expo项目(expo-cli创建)配置修正

针对SDK>41版本,需完成以下步骤:

  • 确保app.json中插件与权限配置正确:
{
  "expo": {
    "plugins": [
      [
        "@react-native-voice/voice",
        {
          "microphonePermission": "语音转文字需要访问麦克风",
          "speechRecognitionPermission": "需要使用系统语音识别服务"
        }
      ]
    ],
    "android": {
      "permissions": ["RECORD_AUDIO"]
    }
  }
}
  • 运行expo prebuild生成原生配置文件(Expo插件需预构建生效,无法直接使用Expo Go预览)
  • 执行expo run:android构建自定义开发客户端,在实体机安装生成的APK后测试

4. 运行时权限检查

必须确保应用已获取麦克风权限,否则会导致调用失败:

import { PermissionsAndroid } from 'react-native';

const requestMicPermission = async () => {
  const granted = await PermissionsAndroid.request(
    PermissionsAndroid.PERMISSIONS.RECORD_AUDIO,
    {
      title: "麦克风权限申请",
      message: "语音转文字功能需要使用您的麦克风",
      buttonPositive: "允许"
    }
  );
  return granted === PermissionsAndroid.RESULTS.GRANTED;
};

// 在启动录音前调用权限检查
const startRecording = async () => {
  const hasPermission = await requestMicPermission();
  if (!hasPermission) {
    alert('请允许麦克风权限后再尝试');
    return;
  }
  try {
    await Voice.start('zh-CN');
  } catch (err) {
    console.error(err);
  }
};

5. 版本兼容性验证

确认@react-native-voice/voice版本与RN/Expo SDK版本匹配:

  • Expo SDK 49+建议使用3.2.4及以上版本的@react-native-voice/voice
  • 原生RN 0.70+需对应兼容的包版本,可查看包的README文档确认适配范围

内容的提问来源于stack exchange,提问作者Aqib Naeem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 06:50:27