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
相关产品推荐
相关产品推荐

