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

Flutter中如何使用系统安全目录存储音频文件?

解决方案:将Flutter音频录制存储到系统安全目录

直接利用path_provider包提供的应用专属文档目录即可,这个目录是系统级安全的:

  • Android:属于应用私有沙箱目录,其他应用无法访问,Android 10+默认加密;
  • iOS:受系统Data Protection保护,只有当前应用能访问,默认加密。

不需要额外引入加密库,替换原有临时目录的逻辑即可,同时建议生成唯一文件名避免覆盖旧录制文件。

修改后的核心代码

import 'dart:io';
import 'dart:typed_data';
import 'dart:math';
import 'package:flutter/services.dart';
import 'package:path_provider/path_provider.dart';

class _AudioRecorderState extends State<AudioRecorder> {
  late String filePath;
  // ... 其他原有变量

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      // ... 原有UI代码
      body: Center(
        child: ElevatedButton(
          child: const Text('Start Recording'),
          onPressed: () async {
            // audioPlayer.start(); // 按业务逻辑调整,录制时启动播放器需确认合理性
            await microphoneRecorder.start();
            filePath = await _getSecureFilePath(); // 替换为安全路径获取方法
          },
        ),
      ),
    );
  }

  // 替换原_getFilePath,获取系统安全目录+唯一文件名
  Future<String> _getSecureFilePath() async {
    // 获取应用专属文档目录(系统安全)
    final directory = await getApplicationDocumentsDirectory();
    // 生成唯一文件名(时间戳+随机数避免重复)
    final fileName = 'recording_${DateTime.now().millisecondsSinceEpoch}_${Random().nextInt(1000)}.wav';
    return '${directory.path}/$fileName';
  }

  Future<void> _saveRecording() async {
    final recording = await microphoneRecorder.stop();
    if (recording == null) return; // 增加空值判断,避免异常
    final file = File(filePath);
    await file.writeAsBytes(recording.buffer.asUint8List());
  }

  @override
  void dispose() {
    audioPlayer.dispose();
    _saveRecording();
    super.dispose();
  }
}

关键说明

  1. 目录选择:getApplicationDocumentsDirectory()返回的是应用永久存储的私有目录,不会被系统自动清理(临时目录可能在空间不足时被删除)。
  2. 文件名唯一性:用时间戳+随机数生成文件名,防止多次录制覆盖同一个文件。
  3. 权限说明:
    • Android:无需额外申请存储权限,因为是应用私有沙箱目录;
    • iOS:无需配置权限,系统默认保护该目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 14:22:30