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

Expo SDK 49.0.0中expo-image-picker无法访问相册的解决方案咨询

解决方案:Expo SDK 49 + expo-image-picker ~14.3.2 相册访问异常修复

1. 补全权限配置细节

确认app.json/app.config.js中的插件配置包含iOS 14+所需的有限相册权限描述(如果需要),同时保证权限文案清晰有意义,避免系统拒绝授权:

"plugins": [
  [
    "expo-image-picker",
    {
      "photosPermission": "需要访问您的相册以选择图片或视频",
      "cameraPermission": "需要访问您的相机以拍摄内容",
      "limitedPhotosPermission": "允许访问部分相册内容"
    }
  ]
]

2. 手动前置权限请求

SDK 49中launchImageLibraryAsync不会自动触发权限弹窗,需先主动请求权限再调用相册:

import { ImagePicker } from 'expo-image-picker';

const requestAlbumPermission = async () => {
  const { status } = await ImagePicker.requestMediaLibraryPermissionsAsync();
  if (status !== 'granted') {
    alert('请在系统设置中开启相册权限后重试');
    return false;
  }
  return true;
};

const pickFromAlbum = async () => {
  const hasPermission = await requestAlbumPermission();
  if (!hasPermission) return;

  let result = await ImagePicker.launchImageLibraryAsync({
    mediaTypes: ImagePicker.MediaTypeOptions.All,
    allowsEditing: true,
    aspect: [4, 3],
    quality: 1,
  });

  if (!result.canceled) {
    // 处理选中的媒体资源,注意SDK49返回结构改为assets数组
    console.log('选中资源URI:', result.assets[0].uri);
  }
};

注意:SDK 49返回结果的取消标识从cancelled改为canceled,选中内容存于assets数组,旧逻辑需适配此变化。

3. 清除缓存并重建项目

SDK升级后缓存可能引发异常,执行以下命令重置:

# 清除Expo缓存并重启服务
npx expo start --clear

# 若使用本地构建,清理并重新生成原生文件
npx expo prebuild --clean

4. 升级expo-image-picker到兼容版本

将expo-image-picker升级至SDK 49对应的最新兼容版本,执行:

npm install expo-image-picker@latest
# 或 yarn add expo-image-picker@latest

5. iOS设备额外检查

  • 前往设置 > 你的应用,确认相册权限未被手动禁用,若禁用则重新开启
  • 确保设备系统版本在iOS 13及以上,过低版本可能存在兼容性问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 04:37:45