实现播控中心播放音乐

目前本人用的版本为:5.0.3.806

module.json5中的申请长时任务已经可以不用设置,以及长时任务需要的@ohos.resourceschedule.backgroundTaskManager和@ohos.app.ability.wantAgent也不用了,

下面是点击按钮播放歌曲并且同步到播控中心的案例:

@Entry
@Component
struct Index {
  song: songItemType = {
    //网络图片,如果失效,请更换别的图片
    img: 'https://imge.kugou.com/stdmusic/20240919/20240919103002858967.jpg',
    name: '秋风吹起',
    author: '清唯',
    //网络音乐,如果失效,请更换别的音乐
    url: 'https://webfs.kugou.com/202409222148/238099cd5031b52cad74b156b1918769/v3/0b3b79e5102779dabe498bd5429186c9/yp/p_0_960119/ap1014_us0_mii0w1iw8z2ai2iphcu80ooo2ki81120_pi406_mx671901531_s941127250.mp3',
    id: '0007',
  }

  build() {
    Column() {
      Button("播放歌曲")
        .onClick(() => {
          AvPlayerManager.player!.url = this.song.url
          AvSessionManager.setAvMetaData(this.song)
        })


    }
    .height('100%')
    .width('100%')
  }
}

av播放器:

export class AvPlayerManager {
  //音视频播放实例
  static player: media.AVPlayer | null = null

  //创建单例的音视频播放实例的方法(在Ability创建时初始化)
  static async init() {
    if (!AvPlayerManager.player) {
      AvPlayerManager.player = await media.createAVPlayer()
    }
    //监听stage的属性变化
    AvPlayerManager.player.on("stateChange", (stage) => {
      switch (stage) {
        case "initialized":
          AvPlayerManager.player?.prepare()
          console.log('MyLogger:initialized')
          break;
        case "prepared":
          AvPlayerManager.player?.play()
          console.log('MyLogger:prepared')
          break;
      }
    })
  }
}

会话管理:

注意:会话这里一定要满足两点,不然播控中心无法显示你播放的应用
1.一定要设置会话的数据
2.会话最少需要一个on在监控播控中心

export class AvSessionManager {
  //会话
  static session: avSession.AVSession

  //初始化对象
  static async init(context: Context) {
    AvSessionManager.session = await avSession.createAVSession(context, 'bgPlay', "audio")
    console.log("MyLogger:sessionId:" + AvSessionManager.session.sessionId)
    AvSessionManager.registerEvent()
  }

  //监控播控中心
  static registerEvent() {
    AvSessionManager.session.on('play', () => {
      console.log("MyLogger:play")
      AvPlayerManager.player?.play()
    })
  }

  //设置会话数据(播控中心的页面)
  static async setAvMetaData(song: songItemType) {
    await AvSessionManager.session.setAVMetadata({
      assetId: song.id,
      title: song.name,
      artist: song.author,
      mediaImage: song.img,
    })
  }
}

export interface songItemType {
  img: string
  name: string
  author: string
  url: string
  id: string
}

Ability进行初始化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值