flutter如何通过audio_service实现后台音频播放

在Flutter中,如何使用audio_service包实现后台音频播放功能?我已经尝试了基本配置,但在切换到后台时音频会停止。需要明确以下问题:1. 如何正确配置AudioService后台任务?2. 如何处理播放控制(播放/暂停/下一首)与前台界面的通信?3. 在Android和iOS上是否需要额外的权限或配置?4. 如何保持通知栏控制器的同步更新?希望能提供具体的代码示例和实现步骤。

2 回复

使用audio_service实现Flutter后台音频播放:

  1. 在pubspec.yaml添加依赖
  2. 创建AudioHandler子类
  3. 实现播放控制方法
  4. 在main.dart中注册服务
  5. 配置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 管理播放状态,系统会在后台保持服务运行。
  • 通知控制:自动生成系统通知,支持播放/暂停/停止等操作。
  • 锁屏控制:在锁屏界面显示播放控件(需正确配置媒体会话)。

确保测试时使用真机,并正确处理应用生命周期事件。

回到顶部