React Native Image Crop Picker在三星Tab A8(Android13)录视频失败
问题:react-native-image-crop-picker在三星Galaxy Tab A8(Android 13)录制视频返回
[Error: User cancelled image selection] 问题详情
在React Native应用中使用react-native-image-crop-picker的相机录制视频功能时,该功能在Android 13/14手机上运行正常,但在三星Galaxy Tab A8(Android 13)平板上出现异常:录制视频并点击确定后,未返回视频路径,反而抛出[Error: User cancelled image selection]错误。拍照功能在该平板上可正常返回结果。
环境版本
- react-native-image-crop-picker: ^0.40.2
- react-native: 0.72.0
- react: 18.2.0
- Android系统: 13
- 受影响设备: 三星Galaxy Tab A8
预期与实际行为
- 预期:录制视频完成后返回视频文件路径,与拍照功能的返回逻辑一致
- 实际:录制完成点击确定后,触发取消错误码
E_PICKER_CANCELLED
复现步骤
- 调用相机功能进入视频录制模式
- 完成视频录制并点击确定按钮
- 未获取到视频路径,反而抛出取消错误
AndroidManifest.xml权限配置
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" /> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
示例代码
recordVideo = async() => { try { const granted = await PermissionsAndroid.request( PermissionsAndroid.PERMISSIONS.CAMERA, { title: "App Camera Permission", message:"App needs access to your camera ", buttonNeutral: "Ask Me Later", buttonNegative: "Cancel", buttonPositive: "OK" } ); if (granted === PermissionsAndroid.RESULTS.GRANTED) { ImagePicker.openCamera({ mediaType:'video' }) .then((image) => { console.log(" Image ", image) }) .catch((error) => { if (error && error.code === 'E_PICKER_CANCELLED') { return false; } }) } else { console.log("Camera permission denied"); } } catch (err) { console.warn(err); } }
解决方案建议
- 补充视频媒体权限
Android 13及以上系统录制视频需要READ_MEDIA_VIDEO权限,当前配置仅包含图片权限,需添加权限到AndroidManifest.xml:
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
同时在代码中请求该权限:
const granted = await PermissionsAndroid.requestMultiple([ PermissionsAndroid.PERMISSIONS.CAMERA, PermissionsAndroid.PERMISSIONS.READ_MEDIA_VIDEO ], { title: "App Camera & Media Permission", message:"App needs access to your camera and video files ", buttonNeutral: "Ask Me Later", buttonNegative: "Cancel", buttonPositive: "OK" }); if (granted[PermissionsAndroid.PERMISSIONS.CAMERA] === PermissionsAndroid.RESULTS.GRANTED && granted[PermissionsAndroid.PERMISSIONS.READ_MEDIA_VIDEO] === PermissionsAndroid.RESULTS.GRANTED) { // 执行相机录制逻辑 }
升级依赖库版本
尝试将react-native-image-crop-picker升级到最新稳定版,确认是否修复了三星平板的兼容性问题。调试完整错误信息
在catch块中打印完整错误对象,获取更多异常细节:
.catch((error) => { console.log("完整错误信息:", error); if (error && error.code === 'E_PICKER_CANCELLED') { return false; } })
- 检查存储路径配置
部分三星设备的媒体存储路径有特殊逻辑,可尝试在openCamera配置中指定视频存储路径:
ImagePicker.openCamera({ mediaType:'video', storageOptions: { skipBackup: true, path: 'videos' } })
内容的提问来源于stack exchange,提问作者Pratap Penmetsa
相关产品推荐
相关产品推荐

