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

如何在Expo开发的React Native应用中申请相机、位置及麦克风权限?

解决React Native中相机、位置、麦克风权限获取问题

首先确保你已在AndroidManifest.xml中声明所需权限:

<!-- 相机权限 -->
<uses-permission android:name="android.permission.CAMERA" />
<!-- 精确定位权限 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 麦克风权限 -->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!-- 若需后台位置权限,添加以下内容 -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />

权限请求的正确实现

使用PermissionsAndroid时需注意异步逻辑处理、权限状态判断,以下是完整的权限请求流程:

1. 定义权限数组

直接使用官方提供的常量避免拼写错误:

import { PermissionsAndroid } from 'react-native';

const REQUIRED_PERMISSIONS = [
  PermissionsAndroid.PERMISSIONS.CAMERA,
  PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
  PermissionsAndroid.PERMISSIONS.RECORD_AUDIO,
  // 后台位置权限按需添加
  // PermissionsAndroid.PERMISSIONS.ACCESS_BACKGROUND_LOCATION,
];

2. 封装权限请求函数

统一处理权限检查与请求,覆盖授权、拒绝、错误三种情况:

async function requestPermissions() {
  try {
    // 批量请求权限
    const grantResults = await PermissionsAndroid.requestMultiple(REQUIRED_PERMISSIONS);
    
    // 验证所有权限是否授权
    const allGranted = REQUIRED_PERMISSIONS.every(perm => grantResults[perm] === PermissionsAndroid.RESULTS.GRANTED);

    if (allGranted) {
      // 权限全部授权,执行后续业务逻辑
      console.log('所有权限已授权');
    } else {
      // 部分权限被拒绝,提示用户前往设置开启
      console.log('部分权限未授权,请在设置中开启');
    }
  } catch (error) {
    console.warn('权限请求失败:', error);
  }
}

3. 调用时机

可在组件初始化时触发,或在用户触发需要权限的操作时调用:

import { useEffect } from 'react';

function App() {
  useEffect(() => {
    requestPermissions();
  }, []);

  return (
    // 你的组件内容
  );
}

常见错误排查

  • 权限常量误用:必须使用PermissionsAndroid.PERMISSIONS下的常量,不要手动拼接权限字符串
  • 异步逻辑未处理:权限请求是异步操作,必须用async/await或Promise处理,不能同步调用
  • Android版本适配:Android 11+对后台位置权限有特殊要求,需先获取前台位置权限才能请求后台权限
  • Manifest未配置:若未在Manifest中声明权限,动态请求会直接被系统拒绝

内容的提问来源于stack exchange,提问作者Sourabh Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 17:42:12