鸿蒙HarmonyOS (开发进阶)音频播放类应用交互场景实践

鸿蒙NEXT开发实战往期必看文章:

一分钟了解”纯血版!鸿蒙HarmonyOS Next应用开发!

“非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线!(从零基础入门到精通)

HarmonyOS NEXT应用开发案例实践总结合(持续更新......)

HarmonyOS NEXT应用开发性能优化实践总结(持续更新......)


概述

对于音频播放类应用,除了歌曲播控的基础能力外,各种交互场景的设计也对用户体验有着重要的影响。本文以音乐播放器应用为例,从应用与用户、播放设备以及其他应用的交互三方面入手,分别对典型使用场景给出示例方案,为应用带来灵活多样、符合用户直觉的交互体验。

场景分析

根据当前HarmonyOS APP开发过程中遇到的实际音频类应用业务场景,总结提炼出如下典型场景,设计其交互功能与方案以供参考:

场景分类

典型场景

场景描述

与用户交互

播控中心操控

无需进入应用直接通过播控中心操控歌曲状态

后台播放音乐

应用位于后台长时间持续播放音乐

与音频播放设备交互

播放设备的状态发生改变

新设备可用、旧设备不可用、用户切换设备场景的适配方案

响应播放设备的指令

蓝牙耳机控制应用播放状态

用户主动切换播放设备

通过投播组件选择播放设备

与其他应用交互

与其他应用音频冲突

被其他音频打断、与其他音频并发

与用户交互

播控中心控制音乐状态

在应用接入播控中心后,用户可以直接通过播控中心修改音频播放状态,如暂停/播放、下一首、切换播放模式、拖动进度条等,应用内的音频信息和状态也会同步显示在播控中心界面上,使得用户与应用的交互更加灵活易用。同时与播控中心交互使用的AVSession还管控着应用的后台播放能力,因此对于音乐类应用一般推荐接入播控中心

应用与播控中心交互的过程如下图所示:

由图可见,应用的接入流程可以主要分为三个部分:创建AVSession、监听播控中心通知以及向播控中心上报应用状态,以下分别给出具体实现:

  1. 应用创建媒体会话在应用的音频渲染器初始化的时候创建并激活AVSession,将此会话用作应用与播控中心交互的媒介,音乐类应用选择创建audio类型的AVSession,不同类型的AVSession对应不同的播控中心样式,详细指导参考媒体会话提供方
    import { avSession } from '@kit.AVSessionKit';
    // ...
    export class AVSessionController {
      private context: common.UIAbilityContext | undefined = undefined;
      private AVSession: avSession.AVSession | undefined = undefined;
      private songList: SongItem[] = [];
      private musicIndex: number | undefined = undefined;
      private audioRendererController: AudioRendererController | undefined = undefined;
      // ...
      private async initAVSession() {
        this.context = AppStorage.get('context');
        if (!this.context) {
          Logger.info(TAG, `session create failed : conext is undefined`);
          return;
        }
        this.audioRendererController = AppStorage.get('audioRendererController');
        if (!this.audioRendererController) {
          Logger.info(TAG, `session create failed : audioRendererController is undefined`);
          return;
        }
        this.AVSession = await avSession.createAVSession(this.context, "PLAY_AUDIO", 'audio');
        await this.AVSession.activate();
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值