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方法控制播放状态

这样配置后,应用退到后台时音频可以继续播放,并会在通知栏显示播放控制界面。

回到顶部