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

Expo SDK46中expo-image-picker授权通过仍提示权限被拒问题

解决Expo SDK 46 + expo-image-picker 13.3.1相机权限报错问题

排查步骤与解决方案

1. 补全权限检查流程

别只申请权限,调用相机前必须主动校验权限状态——哪怕系统显示权限已开启,Expo权限模块可能存在状态不同步的情况:

import { Platform, PermissionsAndroid } from 'react-native';
import * as ImagePicker from 'expo-image-picker';

// 跨平台权限请求
async function getCameraPermission() {
  if (Platform.OS === 'android') {
    const status = await PermissionsAndroid.request(
      PermissionsAndroid.PERMISSIONS.CAMERA,
      {
        title: "相机权限申请",
        message: "应用需要访问相机来拍照",
        buttonPositive: "允许"
      }
    );
    return status === PermissionsAndroid.RESULTS.GRANTED;
  } else {
    const { status } = await ImagePicker.requestCameraPermissionsAsync();
    return status === 'granted';
  }
}

// 调用相机的正确流程
async function openCamera() {
  const hasPermission = await getCameraPermission();
  if (!hasPermission) {
    alert('需要开启相机权限才能使用');
    return;
  }
  
  const result = await ImagePicker.launchCameraAsync({
    mediaTypes: ImagePicker.MediaTypeOptions.Images,
    allowsEditing: false,
    base64: false,
  });
  
  // 处理返回结果
}

2. 核对app.json权限配置

Expo项目必须在app.json中声明权限,SDK46的安卓端需要单独配置:

{
  "expo": {
    "permissions": ["CAMERA", "CAMERA_ROLL"],
    "android": {
      "permissions": ["android.permission.CAMERA"]
    },
    "ios": {
      "infoPlist": {
        "NSCameraUsageDescription": "应用需要访问相机拍摄照片"
      }
    }
  }
}
  • 安卓:根级permissions可能不生效,必须在android.permissions里单独加相机权限
  • iOS:NSCameraUsageDescription不能为空,否则系统会直接拒绝权限请求

3. 清理缓存重建项目

缓存会导致权限状态不同步,执行以下操作:

  • 打开Expo Go,进入设置页面清除客户端缓存
  • 项目根目录运行expo r -c清除项目缓存
  • 若是裸项目,执行expo prebuild --clean后重新构建

4. 确认系统权限实际状态

去设备设置里找到你的应用,手动检查相机权限是否为「允许」状态——有时候系统权限会被意外重置,或者Expo模块没有正确读取系统状态。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:42:39