You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将Expo音频录制文件保存至设备下载文件夹?

解决Expo录音文件保存到安卓下载文件夹的问题

早上好!针对你想把录制的音频文件保存到设备下载文件夹的需求,我会结合你提供的代码给出具体的实现方案:

核心思路

Expo的FileSystem模块提供了文件复制的API,我们可以把录音生成的临时文件复制到安卓系统的下载目录,这个目录可以通过FileSystem.DownloadDirectory直接获取,无需手动拼接路径。

步骤实现

1. 配置安卓权限(必要)

首先需要在你的app.json中添加文件写入权限,确保应用能访问设备存储:

{
  "expo": {
    "android": {
      "permissions": ["WRITE_EXTERNAL_STORAGE"]
    }
  }
}

2. 修改你的录音停止逻辑

在你现有的_stopRecordingAndEnablePlayback方法中,添加文件复制的逻辑,具体代码如下:

async _stopRecordingAndEnablePlayback() { 
  this.setState({ isLoading: true }); 
  try { 
    await this.recording.stopAndUnloadAsync(); 
  } catch (error) { 
    // 忽略已卸载的情况
  } 

  // 获取录音文件的信息
  const recordingUri = this.recording.getURI();
  const info = await FileSystem.getInfoAsync(recordingUri); 
  console.log(`原文件信息: ${JSON.stringify(info)}`); 

  if (info.exists) {
    // 构建下载目录的目标路径:提取原文件名,或者自定义文件名
    const fileName = recordingUri.split('/').pop();
    const downloadPath = `${FileSystem.DownloadDirectory}${fileName}`;

    try {
      // 复制文件到下载目录
      await FileSystem.copyAsync({
        from: recordingUri,
        to: downloadPath
      });
      console.log(`文件已保存到下载目录: ${downloadPath}`);
      // 这里可以添加成功提示,比如Alert.alert("保存成功", "文件已存入下载文件夹")
    } catch (copyError) {
      console.error("保存文件失败:", copyError);
    }
  }

  // 恢复音频模式
  await Audio.setAudioModeAsync({ 
    allowsRecordingIOS: false, 
    interruptionModeIOS: Audio.INTERRUPTION_MODE_IOS_DO_NOT_MIX, 
    playsInSilentModeIOS: true, 
    playsInSilentLockedModeIOS: true, 
    shouldDuckAndroid: true, 
    interruptionModeAndroid: Audio.INTERRUPTION_MODE_ANDROID_DO_NOT_MIX, 
    playThroughEarpieceAndroid: false, 
    staysActiveInBackground: true, 
  });

  this.setState({ isLoading: false });
}

关键说明

  • FileSystem.DownloadDirectory:Expo提供的常量,直接指向安卓系统的公共下载文件夹(用户可以通过系统文件管理器的“下载”目录找到)。
  • 文件复制逻辑:我们先通过原录音URI提取文件名,再拼接下载目录路径,最后用copyAsync完成复制操作,同时处理可能的复制错误。
  • 状态更新:记得在最后把isLoading设回false,避免加载状态一直显示。

这样修改后,每次停止录音时,文件就会自动保存到安卓的下载文件夹里啦~

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

火山引擎 最新活动