React Native ImagePicker无法打开相机问题求助
解决react-native-image-picker拍照权限请求异常问题
看起来你遇到的是React Native 0.60+版本下,react-native-image-picker组件相机权限请求异常的问题——点击拍照只触发存储权限请求,再次操作提示权限未授予,但图库选择功能正常。下面是针对性的解决方案:
1. 修正AndroidManifest.xml的权限配置
你当前的权限声明有几个需要调整的点:
- 相机权限需要配合相机特性声明(避免无相机设备报错)
- 适配Android 13+的存储权限变更(
WRITE_EXTERNAL_STORAGE已被废弃)
更新你的权限声明如下:
<!-- 相机权限及特性声明 --> <uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" android:required="false" /> <uses-feature android:name="android.hardware.camera.autofocus" android:required="false" /> <!-- 存储权限:适配Android 13及以下版本 --> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" android:maxSdkVersion="33" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
2. 在代码中主动处理相机权限请求
RN 0.60+采用动态权限管理,react-native-image-picker需要你主动请求相机权限,而不是依赖系统自动弹窗。修改你的ImageChange方法,加入权限检查和请求逻辑:
import ImagePicker, { requestCameraPermissions } from 'react-native-image-picker'; const ImageChange = async () => { // 先请求相机权限 const cameraPermissionResult = await requestCameraPermissions(); if (cameraPermissionResult.granted) { // 权限已授予,打开图片选择器 const options = { title: 'Select Image', }; ImagePicker.showImagePicker(options, response => { console.log('Response=', response); if (response.didCancel) { console.log('user cancelled'); } else if (response.error) { console.log('picker error' + response.error); } else { let source = response; console.log(response.uri); } }); } else { console.log('相机权限未授予,请开启权限后重试'); // 可选:这里可以添加引导用户跳转到应用设置页面的逻辑 } };
3. 额外检查项
- 确保你使用的
react-native-image-picker是最新版本(执行npm install react-native-image-picker@latest更新),旧版本可能存在权限逻辑bug - 确认RN自动链接已生效:RN 0.60+会自动链接原生模块,如果你之前手动链接过,建议先取消手动链接再重新构建项目
这样调整后,点击拍照时会先请求相机权限,权限授予后可正常打开相机,不会再出现只请求存储权限的异常问题。
内容的提问来源于stack exchange,提问作者parv desai
相关产品推荐
相关产品推荐

