更新记录

1.0.2(2026-06-22)

优化安卓媒体会话的显示

1.0.1(2026-04-25)

1.0.1:修复了IOS端,锁屏封面不更新的问题

1.0.0(2026-04-07)

第一次发布

查看更多

平台兼容性

uni-app x(5.07)

Chrome Safari Android Android插件版本 iOS iOS插件版本 鸿蒙 鸿蒙插件版本 微信小程序
× × 9.0 1.0.2 12 1.0.2 5.0 1.0.2 ×

其他

多语言 暗黑模式 宽屏模式 蒸汽模式
× × × √

xd-bgmusic - 跨平台背景音频播放器

基于原生播放器的背景音频播放插件,支持 HarmonyOS、Android、iOS 三端,提供系统媒体控制能力。

功能特性

  • 支持 HarmonyOS、Android、iOS 三端
  • 三端都支持所有已知的音乐格式播放
  • 三端都支持支持系统媒体显示控制(对标QQ音乐的显示方式)
  • 支持播放/暂停、上一首/下一首、进度调节
  • 支持后台播放
  • 支持播放速度调节(0.5, 0.8, 1.0, 1.25, 1.5, 2.0)
  • 支持循环模式(顺序、单曲、随机、列表)
  • 支持收藏状态同步
  • 支持歌词显示
  • 支持音频设备监听(耳机断开自动暂停、蓝牙连接自动恢复)
  • 兼容 uni-app 的 BackgroundAudioManager API

安装

将插件放入项目的 uni_modules 目录即可使用。

使用示例

方式一:函数式 API

import { 
  play, pause, stop, seek, 
  getDuration, getCurrentTime, isPaused,
  setPlaybackRate, getPlaybackRate,
  setLoopMode, getLoopMode,
  setIsFavorite, getIsFavorite,
  setLyric, setSingleLyricText,
  onPlay, onPause, onStop, , , onError, onNext, onPrev, onLoopModeChange,
  destroy 
} from "@/uni_modules/xd-bgmusic";
import type { BgMusicOptions } from "@/uni_modules/xd-bgmusic";

// 播放音频
const options: BgMusicOptions = {
  src: 'https://example.com/audio.mp3',
  title: '歌曲标题',
  singer: '歌手',
  coverImgUrl: 'https://example.com/cover.jpg',
  epname: '专辑名',
  startTime: 0,
  success: (res) => {
    console.log('播放成功', res);
  },
  fail: (err) => {
    console.error('播放失败', err);
  }
};
play(options);

// 暂停
pause();

// 停止
stop();

// 跳转进度(秒)
seek(30);

// 获取状态
const currentTime = getCurrentTime();
const duration = getDuration();
const paused = isPaused();

// 播放速度(支持 0.5, 0.8, 1.0, 1.25, 1.5, 2.0)
setPlaybackRate(1.5);
const rate = getPlaybackRate();

// 循环模式:0-顺序播放, 1-随机播放, 2-单曲循环, 3-列表循环
setLoopMode(2);
const mode = getLoopMode();

// 收藏状态
setIsFavorite(true);
const favorite = getIsFavorite();

// 歌词
setLyric('[00:00.00]歌词内容...');
setSingleLyricText('当前歌词');

// 监听播放事件
onPlay(() => {
  console.log('开始播放');
});

onPause(() => {
  console.log('播放暂停');
});

onStop(() => {
  console.log('播放停止');
});

(() => {
  console.log('播放结束');
});

(() => {
  console.log('当前时间:', getCurrentTime());
  console.log('总时长:', getDuration());
});

onError((err) => {
  console.error('播放错误:', err);
});

onNext(() => {
  console.log('点击了下一首');
});

onPrev(() => {
  console.log('点击了上一首');
});

onLoopModeChange((mode) => {
  console.log('循环模式改变:', mode);
});

// 销毁播放器
destroy();

方式二:BackgroundAudioManager API(兼容 uni-app)

import { getBackgroundAudioManager } from "@/uni_modules/xd-bgmusic";

const bgAudioManager = getBackgroundAudioManager();

// 设置音频信息并播放
bgAudioManager.title = '歌曲标题';
bgAudioManager.singer = '歌手';
bgAudioManager.coverImgUrl = 'https://example.com/cover.jpg';
bgAudioManager.epname = '专辑名';
bgAudioManager.src = 'https://example.com/audio.mp3';

// 播放控制
bgAudioManager.play();
bgAudioManager.pause();
bgAudioManager.stop();
bgAudioManager.seek(30);

// 播放速度
bgAudioManager.playbackRate = 1.5;

// 歌词
bgAudioManager.setLyric('[00:00.00]歌词内容...');
bgAudioManager.setSingleLyricText('当前歌词');

// 获取状态
console.log('时长:', bgAudioManager.duration);
console.log('当前时间:', bgAudioManager.currentTime);
console.log('是否暂停:', bgAudioManager.paused);

// 事件监听
bgAudioManager.onPlay(() => {
  console.log('开始播放');
});

bgAudioManager.onPause(() => {
  console.log('播放暂停');
});

bgAudioManager.onStop(() => {
  console.log('播放停止');
});

bgAudioManager.onEnded(() => {
  console.log('播放结束');
});

bgAudioManager.onTimeUpdate(() => {
  console.log('进度更新:', bgAudioManager.currentTime);
});

bgAudioManager.onError((err) => {
  console.error('播放错误:', err);
});

bgAudioManager.onPrev(() => {
  console.log('上一首');
});

bgAudioManager.onNext(() => {
  console.log('下一首');
});

API 文档

函数式 API

方法名 参数 返回值 说明
play(options) BgMusicOptions void 播放音频
pause() - void 暂停播放
stop() - void 停止播放
seek(position) number void 跳转到指定位置(秒)
getDuration() - number 获取音频总时长(秒)
getCurrentTime() - number 获取当前播放位置(秒)
isPaused() - boolean 获取是否暂停状态
setPlaybackRate(rate) number void 设置播放速度
getPlaybackRate() - number 获取播放速度
setLoopMode(mode) number void 设置循环模式
getLoopMode() - number 获取循环模式
setIsFavorite(isFavorite) boolean void 设置收藏状态
getIsFavorite() - boolean 获取收藏状态
setLyric(lyric) string void 设置歌词
setSingleLyricText(text) string void 设置单行歌词
destroy() - void 销毁播放器

事件监听

方法名 回调参数 说明
onPlay(callback) - 监听播放开始
onPause(callback) - 监听播放暂停
onStop(callback) - 监听播放停止
onEnded(callback) - 监听播放结束
onTimeUpdate(callback) - 监听播放进度更新
onError(callback) BgMusicFail 监听播放错误
onNext(callback) - 监听下一首事件(来自系统控制)
onPrev(callback) - 监听上一首事件(来自系统控制)
onLoopModeChange(callback) mode: number 监听循环模式改变(来自系统控制)

BackgroundAudioManager 属性

属性名 类型 可写 说明
src string 是 音频源地址
title string 是 歌曲标题
singer string 是 歌手名
coverImgUrl string 是 封面图片地址
epname string 是 专辑名
startTime number 是 开始播放位置(秒)
duration number 否 音频总时长(秒)
currentTime number 否 当前播放位置(秒)
paused boolean 否 是否暂停状态
playbackRate number 是 播放速度
buffered number 否 缓冲进度

BgMusicOptions

interface BgMusicOptions {
  src?: string;           // 音频源地址(支持网络地址和本地文件路径)
  title?: string;         // 歌曲标题
  singer?: string;        // 歌手名
  coverImgUrl?: string;   // 封面图片地址
  epname?: string;        // 专辑名
  startTime?: number;     // 开始播放位置(秒)
  success?: (res: BgMusicResult) => void;
  fail?: (res: BgMusicFail) => void;
  complete?: (res: any) => void;
}

循环模式说明

值 说明
0 顺序播放
1 随机播放
2 单曲循环
3 列表循环(默认)

播放速度支持

支持以下播放速度:0.5, 0.8, 1.0, 1.25, 1.5, 2.0

传入其他值时会自动匹配最接近的支持速度。

错误码

错误码 说明
9010001 播放器初始化错误
9010002 网络错误
9010003 播放错误
9010004 格式错误
9010005 未知错误

平台特性

HarmonyOS

  • 使用 AVPlayer 进行音频播放
  • 使用 AVSession 实现系统媒体控制
  • 支持通知栏媒体控制
  • 支持耳机/蓝牙设备控制
  • 支持音频设备断开自动暂停、蓝牙连接自动恢复
  • 支持后台播放

Android

  • 使用原生 androidx.media3 实现
  • 使用原生 media3 自动创建媒体会话,非手动创建通知模式,最低支持安卓9.0
  • 支持后台播放服务
  • 支持通知栏媒体控制

iOS

  • 使用 AVPlayer 实现
  • 支持媒体会话显示
  • 支持后台播放
  • 支持系统媒体控制

权限配置

HarmonyOS

在 harmony-configs/entry/src/main/module.json5 中配置:

{
  "module": {
    "requestPermissions": [
      {
        "name": "ohos.permission.INTERNET"
      },
      {
        "name": "ohos.permission.KEEP_BACKGROUND_RUNNING"
      }
    ],
    "abilities": [
      {
        "backgroundModes": [
          "audioPlayback"
        ]
      }
    ]
  }
}

Android

在 AndroidManifest.xml 中配置:

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

iOS

在 Info.plist 中配置:

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

注意事项

  1. 播放网络音频需要确保服务器支持跨域请求
  2. 本地文件路径需要使用绝对路径
  3. 后台播放需要在应用配置中开启相应权限
  4. 建议在页面卸载时调用 destroy() 释放资源

相关文档

隐私、权限声明

1. 本插件需要申请的系统权限列表:

ohos.permission.INTERNET, ohos.permission.KEEP_BACKGROUND_RUNNING

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

无

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无

暂无用户评论。