Flutter如何实现锁屏播放音乐

在Flutter开发中,如何实现应用在手机锁屏状态下依然可以播放音乐?需要用到哪些插件或技术方案?能否提供一个具体的实现步骤或示例代码?另外,这个功能在iOS和Android平台上是否有不同的实现方式?

2 回复

Flutter中可通过audioplayers插件播放音乐,结合wakelock插件保持屏幕常亮,实现锁屏播放。需在Android和iOS配置中设置后台播放权限。

更多关于Flutter如何实现锁屏播放音乐的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中实现锁屏播放音乐,可以通过以下步骤实现:

1. 添加依赖

pubspec.yaml 中添加音频播放和后台任务插件:

dependencies:
  audioplayers: ^5.0.0
  audio_service: ^0.18.0
  just_audio: ^0.9.35

2. 配置后台服务

创建音频处理服务:

class AudioPlayerTask extends BackgroundAudioTask {
  final _mediaLibrary = MediaLibrary();
  AudioPlayer _audioPlayer = AudioPlayer();
  
  @override
  Future<void> onStart(Map<String, dynamic> params) async {
    final mediaItem = _mediaLibrary.items[params['index']];
    _audioPlayer.play(mediaItem.audioUrl);
    
    AudioServiceBackground.setMediaItem(mediaItem);
    AudioServiceBackground.setState(
      playing: true,
      controls: [MediaControl.play, MediaControl.stop],
    );
  }
  
  @override
  Future<void> onPlay() => _audioPlayer.play();
  
  @override
  Future<void> onPause() => _audioPlayer.pause();
}

3. 初始化音频服务

在主文件中初始化:

void main() {
  runApp(MyApp());
  AudioService.init(
    builder: () => AudioPlayerTask(),
    config: AudioServiceConfig(
      androidNotificationChannelName: '音乐播放',
      androidNotificationIcon: 'mipmap/ic_launcher',
    ),
  );
}

4. 控制播放

在UI中使用:

// 开始播放
AudioService.start(
  backgroundTaskEntrypoint: _audioPlayerTaskEntrypoint,
  params: {'index': 0},
);

// 播放/暂停
AudioService.play();
AudioService.pause();

5. 锁屏控制配置(Android)

AndroidManifest.xml 中添加:

<uses-permission android:name="android.permission.WAKE_LOCK" />

关键特性:

  • 后台播放:使用 audio_service 管理后台任务
  • 锁屏控制:自动集成系统媒体控件
  • 通知栏显示:显示播放信息和控制按钮
  • 音频焦点:自动处理来电等音频中断

注意事项:

  • iOS需要额外配置后台模式
  • 需要处理音频焦点和耳机断开事件
  • 建议使用 just_audio 作为底层播放器以获得更好稳定性

这样即可实现在锁屏界面控制音乐播放的功能。

回到顶部