flutterでデバイスのメディアファイルにアクセスする
📅 2025-11-24
📛 Rerurate_514
FlutterでAndroidのオーディオファイルへアクセスする方法
概要
基本的にAndroidでダウンロードされた音楽は/storage/emulated/0/Download/以下に置かれる。
しかし、Android10以降ではこのディレクトリに直接アクセスできなくなった。
音楽ファイルを取得したい場合はREAD_MEDIA_AUDIO権限を使用する。
やり方
AndroidManifest.xmlに以下を記述する。
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO"/>- 権限要求を行う。
Permission_handler APIを使用する。
Future<void> requestMediaAudioPermission() async {
PermissionStatus status = await Permission.audio.request();
if(status.isGranted){
print('READ_MEDIA_AUDIO permission granted.');
}
else{
print('READ_MEDIA_AUDIO permission denied.');
}
}
- ファイルを取得する。
ファイルは、listSyncメソッドを使用してList型で取得することが出来る。
///このメソッドは外部ストレージのオブジェクトを取得するメソッドです。
Future<Directory> getExternalDir() async {
Directory? directory = Directory("/storage/emulated/0/Download/");
return directory;
}
///このメソッドは外部ストレージのdownloadディレクトリ内のファイルを取得するメソッドです。
Future<List> fetchFileFromDownloadDir() async {
Directory dir = await getExternalDir();
List<FileSystemEntity> list = dir.listSync();
return list;
}
こうして得たListには'/storage/emulated/0/Download/音楽ファイル.mp3'というような感じでファイルのパスが記述される。
再生中の音楽の監視
再生中の音楽の詳細を取得するには、onAudioPositionChangedを使用する。
以下にコード例を示す。
// 状態を監視
audioPlayer.onAudioPositionChanged.listen((Duration duration) {
// 取得した詳細情報を表示
setState(() {
//変数の変更
});
});
曲の再生時間取得
以下にコード例を示す。
double currentPositionInSeconds = 0.0;
audioPlayer.onAudioPositionChanged.listen((Duration duration) {
// 現在の再生位置(秒単位)を取得
double seconds = duration.inSeconds.toDouble();
setState(() {
currentPositionInSeconds = seconds;
});
});
曲の長さ取得
以下にコード例を示す。
Duration songDuration = Duration(); // 曲の長さ(再生時間)を格納する変数
audioPlayer.onDurationChanged.listen((Duration duration) {
// 曲の長さを取得
setState(() {
songDuration = duration;
});
});