React Native中Expo-image-picker在Android无法直接访问相册如何解决
Expo Image Picker Android 无法直接调起相册解决方案
问题根因
Android 10及以上系统引入分区存储机制,若expo-image-picker未明确指定媒体选择类型,会默认触发系统通用文件选择器,而非专门的相册媒体选择器。
修复步骤
- 调整调用方法的入参,明确指定媒体类型为图片
调用launchImageLibraryAsync时必须传入mediaTypes参数为ImagePicker.MediaTypeOptions.Images,触发系统相册选择器,参考代码:import * as ImagePicker from 'expo-image-picker'; const pickImage = async () => { // 先申请相册权限 const permissionResult = await ImagePicker.requestMediaLibraryPermissionsAsync(); if (permissionResult.status !== 'granted') { alert('请授予相册访问权限后重试'); return; } const pickerResult = await ImagePicker.launchImageLibraryAsync({ mediaTypes: ImagePicker.MediaTypeOptions.Images, allowsEditing: true, aspect: [1, 1], quality: 0.7, }); if (!pickerResult.canceled) { const selectedImage = pickerResult.assets[0]; // 后续处理选中图片的逻辑 } }; - 适配高版本Android权限配置
在项目根目录的app.json中添加Android权限声明,适配不同版本系统的权限要求:{ "expo": { "android": { "permissions": [ "READ_EXTERNAL_STORAGE", "READ_MEDIA_IMAGES" ] } } } - 升级依赖并重新编译
若配置后仍未生效,建议将expo-image-picker升级到14.0.0及以上稳定版本,修改配置后需重新执行expo prebuild并编译Android安装包,热更新无法使权限配置生效。
注意事项
若你的App需要同时支持选择视频,可将
mediaTypes参数改为ImagePicker.MediaTypeOptions.All,系统会自动拉起同时包含图片和视频的媒体选择页,不会跳转到通用文件存储目录。
内容的提问来源于stack exchange,提问作者Kim Mỹ
相关产品推荐
相关产品推荐

