You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用audioplayers包实现手机锁屏时持续播放音乐?

解决audioplayers锁屏后音乐停止播放的问题

要实现锁屏后音乐持续播放,需要分别配置Android/iOS的系统权限,并在代码中开启前台通知服务,具体步骤如下:

Android 端配置

  1. 添加权限与服务声明
    在android/app/src/main/AndroidManifest.xml中,添加前台服务权限并注册音频服务:

    <!-- 添加权限 -->
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
    <uses-permission android:name="android.permission.WAKE_LOCK"/> <!-- 可选,防止设备深度休眠 -->
    
    <!-- 在application标签内添加服务 -->
    <application ...>
      <service 
        android:name="xyz.luan.audioplayers.AudioService" 
        android:foregroundServiceType="mediaPlayback"/>
    </application>
    
  2. 创建通知渠道(Android 8.0+)
    Android 8.0及以上要求必须创建通知渠道才能显示前台通知,否则后台播放会被系统终止。可以在App启动时初始化渠道:

    if (Platform.isAndroid) {
      const channel = AndroidNotificationChannel(
        'music_playback_channel', // 唯一ID
        '音乐播放', // 渠道名称
        description: '后台音乐播放通知渠道', // 渠道描述
        importance: Importance.high,
      );
      await FlutterLocalNotificationsPlugin()
          .resolvePlatformSpecificImplementation<AndroidFlutterLocalNotificationsPlugin>()
          ?.createNotificationChannel(channel);
    }
    

    (注:需要依赖flutter_local_notifications包,或者直接通过audioplayers的通知配置自动创建,前者更可控)

iOS 端配置

在ios/Runner/Info.plist中添加后台音频模式权限:

<key>UIBackgroundModes</key>
<array>
  <string>audio</string>
</array>

这会告诉iOS系统,你的App需要在后台处理音频任务,不会被系统挂起。

代码层面设置

初始化AudioPlayer时,必须开启通知并配置通知详情,确保音乐以前台服务形式运行:

import 'package:audioplayers/audioplayers.dart';
import 'package:flutter/foundation.dart';

final player = AudioPlayer();

Future<void> initPlayer() async {
  // 设置播放模式,可选:loop、release、stop
  await player.setReleaseMode(ReleaseMode.loop);
  
  // 开启通知,这是后台播放的关键
  await player.setNotificationEnabled(true);
  
  // 配置通知详情
  await player.setNotificationDetails(
    NotificationDetails(
      android: AndroidNotificationDetails(
        'music_playback_channel', // 与之前创建的渠道ID一致
        '音乐播放',
        channelDescription: '后台播放音乐时显示的通知',
        importance: Importance.high,
        priority: Priority.high,
        ongoing: true, // 标记通知为持续型,无法手动清除
        showProgress: true,
      ),
      iOS: IOSNotificationDetails(
        playPauseButton: true,
        stopButton: true,
        forwardSkipButton: false,
        backwardSkipButton: false,
      ),
    ),
  );

  // 加载并播放音频
  await player.play(UrlSource('your_audio_url_or_path'));
}

关键注意事项

  • Android上必须开启前台通知:系统会在App进入后台后回收资源,只有前台服务(带通知)才能保持音频播放。
  • iOS上确保音频会话正确:audioplayers会自动配置音频会话为播放模式,但如果有冲突,可以手动调整(比如使用audio_session包)。
  • 避免使用ReleaseMode.release:该模式会在音频播放完毕后释放资源,后台播放时建议用loop或stop。

内容的提问来源于stack exchange,提问作者Taoufik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 18:05:34