Flutter如何实现audioplayers后台播放
在Flutter中使用audioplayers插件时,如何实现后台播放功能?我已经按照文档配置了Android和iOS的后台权限,但应用退到后台后音频就会停止。是否需要额外设置特定的回调或Service?另外,锁屏界面能否显示播放控件?希望能提供具体的代码示例和解决方案。
2 回复
使用audioplayers插件,需配置后台播放权限。在pubspec.yaml添加依赖,Android端修改AndroidManifest.xml,iOS端修改Info.plist。调用setReleaseMode(ReleaseMode.RELEASE)确保后台播放。
更多关于Flutter如何实现audioplayers后台播放的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中实现后台音频播放,可以使用audioplayers配合audio_service插件。以下是具体实现步骤:
1. 添加依赖
在 pubspec.yaml 中添加:
dependencies:
audioplayers: ^5.0.0
audio_service: ^0.18.0
2. 配置Android权限
在 android/app/src/main/AndroidManifest.xml 中添加:
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
3. 实现AudioHandler
创建音频服务处理类:
class AudioPlayerHandler extends BaseAudioHandler {
final AudioPlayer _player = AudioPlayer();
AudioPlayerHandler() {
_player.onPlayerStateChanged.listen((state) {
playbackState.add(playbackState.value.copyWith(
controls: [MediaControl.play, MediaControl.pause],
processingState: _getProcessingState(state),
playing: state == PlayerState.playing,
));
});
}
AudioProcessingState _getProcessingState(PlayerState state) {
switch (state) {
case PlayerState.playing:
return AudioProcessingState.ready;
case PlayerState.paused:
return AudioProcessingState.ready;
default:
return AudioProcessingState.idle;
}
}
@override
Future<void> play() => _player.play();
@override
Future<void> pause() => _player.pause();
@override
Future<void> stop() => _player.stop();
}
4. 初始化服务
在 main.dart 中初始化:
void main() {
runApp(MyApp());
AudioService.init(
builder: () => AudioPlayerHandler(),
config: AudioServiceConfig(
androidNotificationChannelId: 'com.example.audio',
androidNotificationChannelName: 'Audio Playback',
androidNotificationOngoing: true,
),
);
}
5. 控制播放
在需要的地方控制播放:
// 开始播放
AudioService.play();
// 暂停播放
AudioService.pause();
// 停止服务
AudioService.stop();
关键点说明:
audio_service负责管理后台服务和通知栏控制audioplayers处理实际音频播放- 需要正确配置Android权限和通知渠道
- 通过AudioService方法控制播放状态
这样配置后,应用退到后台时音频可以继续播放,并会在通知栏显示播放控制界面。

