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

Expo React Native生产环境无法获取照片、视频不显示问题

问题1:生产环境仅返回视频资源,无照片

可能原因及解决步骤:

  • 权限配置不全
    检查app.json中的权限配置,确保包含mediaLibrary权限,同时在infoPlist中添加正确的权限描述:

    {
      "expo": {
        "permissions": ["mediaLibrary"],
        "ios": {
          "infoPlist": {
            "NSPhotoLibraryUsageDescription": "需要访问您的媒体库以选择照片和视频",
            "NSPhotoLibraryAddUsageDescription": "需要访问您的媒体库以保存内容"
          }
        }
      }
    }
    

    iOS 14+ 虽读取权限主要依赖NSPhotoLibraryUsageDescription,但完整配置可避免权限请求异常。

  • 验证媒体类型参数
    确认MediaType导入正确:

    import { MediaType } from 'expo-media-library';
    

    尝试拆分请求排查批量请求问题:

    const photos = await MediaLibrary.getAssetsAsync({ mediaType: MediaType.photo, first: 100 });
    const videos = await MediaLibrary.getAssetsAsync({ mediaType: MediaType.video, first: 100 });
    const media = { assets: [...photos.assets, ...videos.assets], ...photos };
    
  • 检查系统权限设置
    让用户在iOS设置中确认App的媒体库权限为「允许访问所有照片」,而非仅视频。


问题2:生产环境localUri无法播放视频

核心原因及解决方法:

iOS生产环境中,localUri对应的file://路径受沙盒权限限制,Expo应用无法直接访问系统原始文件路径,正确做法是使用MediaLibrary.Asset自带的uri字段:

  • 修改媒体资源获取逻辑
    移除对localUri的依赖,直接使用asset.uri:

    const mediaItemsWithFileUris = media.assets.map((asset: Asset) => ({
      id: asset.id,
      uri: asset.uri,
      width: asset.width,
      height: asset.height,
      filename: asset.filename,
      duration: asset.duration,
      mediaType: asset.mediaType,
      syncStatus: SyncStatus.TO_BE_SYNCED,
    }));
    

    无需再调用getAssetInfoAsync,减少不必要的异步请求。

  • 调整轮播组件的URI使用
    直接使用item.uri作为媒体源:

    const sourceUri = item.uri;
    
  • 验证Video组件配置
    确保expo-av已正确安装配置,Video组件使用asset.uri即可正常播放,无需额外协议转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 06:03:22