You need to enable JavaScript to run this app. React Native Expo-Camera录视频遇音频权限被拒 装expo-permissions仍无效
优惠活动
大模型
产品
解决方案
定价
更多

React Native Expo-Camera录视频遇音频权限被拒 装expo-permissions仍无效

问题根因

你当前的权限申请逻辑只获取了相机权限的授权,没有单独申请视频录制必需的麦克风音频权限。
拍照流程仅需调用摄像头硬件,拿到相机权限后就能正常运行;但视频录制流程需要同时占用摄像头+麦克风硬件,系统检测到未获得麦克风权限授权时,就会抛出“音频权限被用户拒绝”的异常。
你安装了expo-permissions但问题没解决,核心原因是代码里没有实际触发麦克风权限的申请流程——安装权限库但不调用对应申请方法,系统不会自动拉起授权弹窗,也不会主动授予权限。

修复方案

1. 补充麦克风权限申请逻辑

新版本expo-camera已经把相机、麦克风的权限申请拆分为两个独立方法,旧版本通用的Camera.requestPermissionsAsync()不会自动连带申请麦克风权限,需要在初始化阶段同时申请两类权限:
替换原有权限申请的Effect代码:

useEffect(() => {
  (async () => {
    // 分别申请相机、麦克风权限
    const cameraAuth = await Camera.requestCameraPermissionsAsync();
    const micAuth = await Camera.requestMicrophonePermissionsAsync();
    // 只有两类权限都获得授权,才允许渲染相机功能
    setHasPermission(
      cameraAuth.status === "granted" && micAuth.status === "granted"
    );
  })();
}, []);

2. 增加权限被拒后的引导逻辑

如果用户之前已经手动拒绝过某类权限,应用内不会再次弹出系统授权弹窗,此时需要增加跳转系统设置的引导:
替换原有权限拒绝的渲染逻辑:

if (hasPermission === false) {
  return (
    <View style={styles.permissionDeniedTip}>
      <Text style={styles.text}>需要同时授予相机、麦克风权限,才能正常使用拍摄/录制功能</Text>
      <TouchableOpacity onPress={() => Linking.openSettings()}>
        <Text style={[styles.text, { color: "lightblue", marginTop: 12 }]}>前往系统设置开启权限</Text>
      </TouchableOpacity>
    </View>
  )
}

记得在文件头部引入Linking模块:

import { Linking } from "react-native";

3. 可选:无音频录制适配

如果业务场景不需要录制带声音的视频,可以直接在录制方法中配置参数关闭音频采集,此时就不需要申请麦克风权限:
修改原有recordVideo的调用参数:

const videoRecordPromise = cameraRef.current.recordAsync({
  mute: true // 关闭音频采集,跳过麦克风权限校验
});
排查注意点
  • 检查app.json中的权限配置:iOS端需要补充NSMicrophoneUsageDescription的权限说明文案,Android端需要声明android.permission.RECORD_AUDIO权限
  • 不要在权限状态未确认完成时就渲染Camera组件,避免组件初始化时触发权限校验异常
  • 确认expo-camera版本和项目SDK版本匹配,不要混用旧版权限API

内容的提问来源于stack exchange,提问作者Julfikar Haidar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 08:36:03