Flutter如何通过audio_service在iOS实现后台音频播放
在Flutter中使用audio_service插件时,iOS平台的后台音频播放功能始终无法正常工作。我已经按照文档配置了Info.plist中的后台模式权限,并实现了AudioServiceBackground.run(),但应用切换到后台后音频仍会中断。以下是具体问题:
- 是否需要额外设置Capabilities中的Background Modes?
- audio_service的iOS端是否需要单独注册后台任务?
- 是否有完整的iOS端配置示例(包括AppDelegate修改)?
测试环境:Flutter 3.7,audio_service ^0.18.7,Xcode 14.2。
更多关于Flutter如何通过audio_service在iOS实现后台音频播放的实战教程也可以访问 https://www.itying.com/category-92-b0.html
2 回复
在Flutter中,使用audio_service包实现iOS后台音频播放,需配置Info.plist文件,添加后台音频模式权限。在AudioService配置中启用后台播放,并处理音频会话和远程控制事件。
更多关于Flutter如何通过audio_service在iOS实现后台音频播放的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在 Flutter 中,使用 audio_service 包可以在 iOS 上实现后台音频播放。以下是关键步骤和代码示例:
1. 添加依赖
在 pubspec.yaml 中添加:
dependencies:
audio_service: ^0.18.0
just_audio: ^0.9.24 # 用于音频播放
2. 配置 iOS 后台模式
在 ios/Runner/Info.plist 中添加:
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
3. 实现 AudioHandler
创建自定义的 AudioHandler 类:
import 'package:audio_service/audio_service.dart';
import 'package:just_audio/just_audio.dart';
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,
],
systemActions: const {
MediaAction.seek,
},
androidCompactActionIndex: 0,
processingState: const {
ProcessingState.idle: AudioProcessingState.idle,
ProcessingState.loading: AudioProcessingState.loading,
ProcessingState.buffering: AudioProcessingState.buffering,
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. 初始化 AudioService
在 main.dart 中初始化:
void main() async {
await AudioService.init(
builder: () => MyAudioHandler(),
config: AudioServiceConfig(
androidNotificationChannelId: 'com.example.audio',
androidNotificationChannelName: 'Audio Playback',
androidNotificationOngoing: true,
),
);
runApp(MyApp());
}
5. 控制播放
在 UI 中使用:
FloatingActionButton(
onPressed: () {
AudioService.play(); // 开始播放
},
child: Icon(Icons.play_arrow),
)
注意事项:
- 确保音频源支持流式传输(如 HTTPS URL)
- 测试时使用真机,模拟器可能不支持后台音频
- 处理音频会话和远程控制(耳机按钮、控制中心)
这样配置后,应用在 iOS 进入后台时仍能继续播放音频,并显示控制界面。

