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

Android 10及以上创建Environment.DIRECTORY_RECORDINGS目录的正确方法

Android 10+ 创建Recordings目录并通过MediaStore存储录音文件的正确方式

在Android 10(API 29)及以上的分区存储机制下,无法直接通过文件系统创建外部公共目录,但可以通过MediaStore API间接触发系统自动创建Environment.DIRECTORY_RECORDINGS指向的目录,具体实现如下:

核心实现思路

不需要手动创建目录,而是在向MediaStore插入文件元数据时,通过指定RELATIVE_PATH字段为Environment.DIRECTORY_RECORDINGS,让系统自动检测并创建目标目录(若不存在)。

具体代码示例

  1. 构建文件元数据的ContentValues,指定存储路径:
val contentValues = ContentValues().apply {
    put(MediaStore.Audio.Media.DISPLAY_NAME, "recording_${System.currentTimeMillis()}.m4a")
    put(MediaStore.Audio.Media.MIME_TYPE, "audio/mp4a-latm")
    // 指定相对路径,触发系统创建Recordings目录
    put(MediaStore.Audio.Media.RELATIVE_PATH, Environment.DIRECTORY_RECORDINGS)
    put(MediaStore.Audio.Media.IS_PENDING, 1) // 标记为待处理,避免其他应用干扰写入
}
  1. 插入元数据到MediaStore,获取文件Uri:
val uri = contentResolver.insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, contentValues)

执行此步骤时,系统会自动检查Recordings目录是否存在,若不存在则直接创建,不会导致插入操作失败。

  1. 录音完成后,更新文件状态为已完成:
uri?.let {
    val updateValues = ContentValues().apply {
        put(MediaStore.Audio.Media.IS_PENDING, 0)
    }
    contentResolver.update(it, updateValues, null, null)
}

关键注意事项

  • Android 10+ 操作MediaStore公共目录无需申请WRITE_EXTERNAL_STORAGE权限,仅需确保录音相关的RECORD_AUDIO权限已申请
  • MIME类型需与录音文件格式匹配(如WAV对应audio/wav,MP3对应audio/mpeg)
  • 避免硬编码目录名称,始终使用Environment.DIRECTORY_RECORDINGS适配不同ROM的目录命名规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 17:39:58