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

Android 14选择「选取照片和视频」时存储权限被拒问题求助

Android 14 「选取照片和视频」权限下存储权限返回拒绝的解决方案

问题原因

Android 14 对媒体权限进行了细分,「选取照片和视频」属于READ_MEDIA_IMAGES和READ_MEDIA_VIDEOS权限范畴,传统的READ_EXTERNAL_STORAGE存储权限在这种细分权限模式下会被系统判定为拒绝状态——因为Android 14不再通过存储权限管控媒体文件访问,而是采用更精细化的媒体权限体系。

具体解决步骤

  • 调整权限申请逻辑:使用react-native-permissions申请对应的细分媒体权限,而非存储权限。目标权限为PERMISSIONS.ANDROID.READ_MEDIA_IMAGES和PERMISSIONS.ANDROID.READ_MEDIA_VIDEOS。
  • 更新AndroidManifest.xml:替换原有存储权限声明,添加细分媒体权限:
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEOS" />
  • 适配react-native-image-crop-picker:
    1. 升级库到最新稳定版本,确保其支持Android 14媒体权限机制。
    2. 调用选择器前,检查细分媒体权限状态而非存储权限,示例代码:
import { check, request, PERMISSIONS } from 'react-native-permissions';
import ImagePicker from 'react-native-image-crop-picker';

const pickMedia = async () => {
  // 检查图片和视频权限
  const [imagePerm, videoPerm] = await Promise.all([
    check(PERMISSIONS.ANDROID.READ_MEDIA_IMAGES),
    check(PERMISSIONS.ANDROID.READ_MEDIA_VIDEOS)
  ]);

  // 权限未授予则申请
  if (imagePerm !== 'granted' || videoPerm !== 'granted') {
    const result = await request([
      PERMISSIONS.ANDROID.READ_MEDIA_IMAGES,
      PERMISSIONS.ANDROID.READ_MEDIA_VIDEOS
    ]);
    // 处理申请结果,比如用户拒绝则提示
    if (result[PERMISSIONS.ANDROID.READ_MEDIA_IMAGES] !== 'granted') {
      return;
    }
  }

  // 权限通过后打开选择器
  try {
    const media = await ImagePicker.openPicker({
      mediaType: 'any', // 根据需求选photo/video/any
      // 其他配置项
    });
    // 处理选中的媒体文件
  } catch (error) {
    // 处理错误
  }
};
  • 关键注意点:Android 14中,用户授予「选取照片和视频」权限时,系统不会返回READ_EXTERNAL_STORAGE的授权状态,因此必须完全切换到细分媒体权限的检查逻辑,不要再依赖存储权限的返回结果。

内容的提问来源于stack exchange,提问作者Adnan Ashraf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 06:07:25