ソフトウェア技術研究会

flutterでデバイスのメディアファイルにアクセスする

📅 2025-11-24

📛 Rerurate_514

FlutterでAndroidのオーディオファイルへアクセスする方法

概要

基本的にAndroidでダウンロードされた音楽は/storage/emulated/0/Download/以下に置かれる。

しかし、Android10以降ではこのディレクトリに直接アクセスできなくなった。

音楽ファイルを取得したい場合はREAD_MEDIA_AUDIO権限を使用する。

やり方

  1. AndroidManifest.xmlに以下を記述する。
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO"/>
  1. 権限要求を行う。
    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.');
	}
}
  1. ファイルを取得する。
    ファイルは、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;
	});
});
© 2025 ソフトウェア技術研究会