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

Flutter iOS端如何选择音乐文件夹并获取其路径

iOS端Flutter访问音乐文件夹与媒体音乐的解决方案

一、为什么file_picker看不到Music应用里的音乐?

iOS的Music应用音乐存储在系统媒体库,属于沙盒外的受保护区域,普通文件选择器(包括file_picker)无法直接访问。只有通过系统提供的媒体库权限API才能获取这些音乐资源。

二、实现方案

1. 访问用户自定义的音乐文件夹(文件系统内的)

如果用户的音乐存在iCloud Drive或本地文件系统的文件夹里,file_picker可以正常选择,但需先配置iOS权限:

  • 在Info.plist中添加NSFileProviderDomainUsageDescription和NSDocumentPickerUsageDescription,填写访问文件的用途说明。
  • 调用file_picker的文件夹选择方法:
String? selectedDir = await FilePicker.platform.getDirectoryPath();
if (selectedDir != null) {
  // 处理选中的文件夹路径,遍历其中的音乐文件
}

2. 访问Music应用内的音乐资源

要获取系统媒体库的音乐,需借助媒体库相关的Flutter包,步骤如下:

  • 配置权限:在Info.plist中添加NSAppleMusicUsageDescription,说明访问媒体库的用途。
  • 获取媒体库音乐列表:使用flutter_media_metadata包扫描系统媒体库,获取音乐的元数据与路径:
import 'package:flutter_media_metadata/flutter_media_metadata.dart';

Future<void> fetchLibraryMusic() async {
  final List<Metadata> musicTracks = await MetadataRetriever.retrieveMedia();
  for (var track in musicTracks) {
    print('音乐名称: ${track.trackName}, 文件路径: ${track.filePath}');
    // 将这些信息展示给用户选择
  }
}
  • 播放音乐:用just_audio包加载获取到的路径进行播放:
import 'package:just_audio/just_audio.dart';

final audioPlayer = AudioPlayer();
await audioPlayer.setFilePath(selectedTrack.filePath);
audioPlayer.play();

3. 结合两种场景

在应用中设置两个入口:一个是「选择本地文件夹」(用file_picker),另一个是「从音乐库选择」(用媒体库API),覆盖用户不同的音乐存储场景。

三、注意事项

  • iOS 14及以上版本必须配置完整的隐私权限描述,否则应用会崩溃或无法访问资源。
  • 系统媒体库返回的音乐路径是沙盒映射路径,可直接用于播放,无需解析真实物理路径。
  • 若支持iCloud音乐库,需确保用户开启同步,并在应用中配置对应的iCloud权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:41:05