如何在React Native应用中打开Android系统相册并解决黑屏问题
问题根因
你当前使用Linking.openURL("content://media/internal/images/media")唤起安卓相册的逻辑存在缺陷:该URI仅指向安卓媒体存储的内容提供者路径,没有配套选图结果的接收回调逻辑,选中照片后系统无法将数据回传给你的应用,进而触发黑屏。iOS端的photos-redirect://是系统专门适配的相册跳转scheme,自带返回原应用的逻辑,因此可以正常运行。
问题现象截图:
修复方案
不推荐直接用Linking实现安卓选图需求,优先使用社区成熟的封装库,无需自行处理原生适配逻辑:
- 普通RN项目可以接入
react-native-image-picker,双端能力统一,自带选图结果回调 - Expo项目可以接入
expo-image-picker,无需额外原生配置
接入后调用示例:
import { launchImageLibrary } from 'react-native-image-picker'; openPhotos = () => { switch(Platform.OS){ case "ios": Linking.openURL("photos-redirect://"); break; case "android": // 调用选图能力,直接在回调中拿到选中的照片数据 launchImageLibrary({ mediaType: 'photo' }, (res) => { if (res.assets?.length) { const selectedPhotoUri = res.assets[0].uri; // 自行处理选中的照片逻辑 } }) break; default: console.log("Could not open gallery app"); } }
如果必须自行原生实现,需要在安卓原生层新增接收选图结果的Activity,注册ACTION_PICK意图过滤器,封装原生模块供RN层调用,在onActivityResult生命周期中接收选中的照片URI回传给RN层即可,无需再通过Linking跳转。
内容的提问来源于stack exchange,提问作者Ashish Prasad
相关产品推荐
相关产品推荐

