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

Expo 37.0.12使用expo-image-picker-multiple多图选择权限报错问题

Expo Android多图选择权限报错排查与解决方案

排查方向

  • 检查app.json中安卓权限声明是否完整:Expo 37要求所有用到的原生权限必须在配置中提前声明,未声明的权限调用请求会直接返回失败。
  • 检查权限调用逻辑是否符合API规范:Expo 37的Permissions.askAsync不支持同时传入多个不同分组的权限枚举,混合传入相机、相册、存储权限会直接触发报错。
  • 检查运行设备的安卓系统版本:Android 13(API 33)及以上版本采用了新的媒体权限拆分机制,Expo 37内置的权限适配逻辑无法正常映射,会出现权限获取失败。

修复方案

  • 补全app.json权限配置
    在app.json的expo.android.permissions数组中添加如下权限声明:
{
  "expo": {
    "android": {
      "permissions": [
        "CAMERA",
        "READ_EXTERNAL_STORAGE",
        "WRITE_EXTERNAL_STORAGE"
      ]
    }
  }
}

修改后执行expo start --clear清除缓存重启项目,打包的话需要重新构建安卓安装包生效。

  • 拆分权限请求逻辑,添加错误捕获
    不要一次性请求多个不同类型的权限,拆分请求步骤,同时捕获异步错误避免出现未处理的Promise拒绝:
try {
  // 按需请求相机权限(不需要拍照可跳过)
  const cameraRes = await Permissions.askAsync(Permissions.CAMERA);
  if (cameraRes.status !== 'granted') {
    alert('请授予相机权限后重试');
    return;
  }
  // 请求相册存储权限
  const storageRes = await Permissions.askAsync(Permissions.CAMERA_ROLL);
  if (storageRes.status !== 'granted') {
    alert('请授予存储权限后重试');
    return;
  }
  // 权限获取成功,调用多图选择逻辑
} catch (err) {
  console.error('权限请求异常', err);
}
  • 适配高版本安卓系统
    如果运行设备是Android 13及以上版本,可选择两种适配方案:
    1. 升级Expo版本到46及以上,配套升级多图选择库到对应兼容版本,适配新的媒体权限机制
    2. 在安卓构建配置中将targetSdkVersion降到32以下,规避新权限校验逻辑
  • 调整依赖库版本
    当前使用的expo-image-picker-multiple@1.4.0存在对Expo 37的权限适配缺陷,可降级到1.3.0版本解决兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 05:36:05