flutter如何通过audio_service实现后台音频播放
在Flutter中,如何使用audio_service包实现后台音频播放功能?我已经尝试了基本配置,但在切换到后台时音频会停止。需要明确以下问题:1. 如何正确配置AudioService后台任务?2. 如何处理播放控制(播放/暂停/下一首)与前台界面的通信?3. 在Android和iOS上是否需要额外的权限或配置?4. 如何保持通知栏控制器的同步更新?希望能提供具体的代码示例和实现步骤。
2 回复
使用audio_service实现Flutter后台音频播放:
- 在pubspec.yaml添加依赖
- 创建AudioHandler子类
- 实现播放控制方法
- 在main.dart中注册服务
- 配置Android和iOS权限
关键方法:play()、pause()、stop(),系统会自动管理后台播放状态。
更多关于flutter如何通过audio_service实现后台音频播放的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在 Flutter 中,通过 audio_service 包可以实现后台音频播放,并支持锁屏界面控制。以下是实现步骤:
1. 添加依赖
在 pubspec.yaml 中添加:
dependencies:
audio_service: ^0.18.0
just_audio: ^0.9.29 # 或其他音频播放器
2. 配置 Android 和 iOS
Android:
- 在
AndroidManifest.xml中添加权限和服务:
<uses-permission android:name="android.permission.WAKE_LOCK" />
<service android:name="com.ryanheise.audioservice.AudioService">
<intent-filter>
<action android:name="android.media.browse.MediaBrowserService" />
</intent-filter>
</service>
iOS:
- 在
Info.plist中添加后台模式:
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
3. 创建 Audio Handler
继承 BaseAudioHandler 实现音频控制逻辑:
class MyAudioHandler extends BaseAudioHandler {
final _player = AudioPlayer();
MyAudioHandler() {
_player.playbackEventStream.map(_transformEvent).pipe(playbackState);
}
@override
Future<void> play() => _player.play();
@override
Future<void> pause() => _player.pause();
@override
Future<void> stop() => _player.stop();
PlaybackState _transformEvent(PlaybackEvent event) {
return PlaybackState(
controls: [
MediaControl.play,
MediaControl.pause,
MediaControl.stop,
],
androidCompactActionIndices: [0, 1, 2],
processingState: const {
ProcessingState.idle: AudioProcessingState.idle,
ProcessingState.loading: AudioProcessingState.loading,
ProcessingState.ready: AudioProcessingState.ready,
ProcessingState.completed: AudioProcessingState.completed,
}[_player.processingState]!,
playing: _player.playing,
updatePosition: _player.position,
bufferedPosition: _player.bufferedPosition,
speed: _player.speed,
queueIndex: event.currentIndex,
);
}
}
4. 初始化 Audio Service
在 main() 中初始化:
void main() {
runApp(MyApp());
AudioService.init(
builder: () => MyAudioHandler(),
config: AudioServiceConfig(
androidNotificationChannelId: 'com.example.audio',
androidNotificationChannelName: 'Audio Playback',
androidNotificationOngoing: true,
),
);
}
5. 控制播放
在 UI 中使用:
// 开始播放
AudioService.play();
// 暂停
AudioService.pause();
// 停止
AudioService.stop();
关键点说明
- 后台播放:通过
AudioService管理播放状态,系统会在后台保持服务运行。 - 通知控制:自动生成系统通知,支持播放/暂停/停止等操作。
- 锁屏控制:在锁屏界面显示播放控件(需正确配置媒体会话)。
确保测试时使用真机,并正确处理应用生命周期事件。

