更新记录

1.0.0(2026-04-07)

第一次发布


平台兼容性

uni-app x(4.74)

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

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

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

功能特性

  • 支持 HarmonyOS、Android、iOS 三端
  • HarmonyOS 端基于 AVPlayer + AVSession 实现
  • 支持系统媒体控制(通知栏、耳机、蓝牙控制)
  • 支持播放/暂停、上一首/下一首、进度调节
  • 支持后台播放
  • 支持播放速度调节(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

  • 使用原生 MediaPlayer 实现
  • 支持后台播放服务
  • 支持通知栏媒体控制

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. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。