You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

复现步骤

  1. 调用相机功能进入视频录制模式
  2. 完成视频录制并点击确定按钮
  3. 未获取到视频路径,反而抛出取消错误

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);
  }
}

解决方案建议

  1. 补充视频媒体权限
    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) {
  // 执行相机录制逻辑
}
  1. 升级依赖库版本
    尝试将react-native-image-crop-picker升级到最新稳定版,确认是否修复了三星平板的兼容性问题。

  2. 调试完整错误信息
    在catch块中打印完整错误对象,获取更多异常细节:

.catch((error) => {
  console.log("完整错误信息:", error);
  if (error && error.code === 'E_PICKER_CANCELLED') {
    return false;
  }
})
  1. 检查存储路径配置
    部分三星设备的媒体存储路径有特殊逻辑,可尝试在openCamera配置中指定视频存储路径:
ImagePicker.openCamera({
  mediaType:'video',
  storageOptions: {
    skipBackup: true,
    path: 'videos'
  }
})

内容的提问来源于stack exchange,提问作者Pratap Penmetsa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 11:17:25