音频播放及焦点监听,如何处理音频焦点抢占问题

音频播放及焦点监听

HarmonyOS
2024-06-13 23:40:34
浏览
收藏 0
回答 2
待解决
回答 2
按赞同
/
按时间
鱼弦CTO
1
分享
微博
QQ
微信
回复
2024-07-09 09:46:22
jshyb

音频分类

枚举值

说明

AUDIOSTREAM_USAGE_UNKNOWN

未定义

AUDIOSTREAM_USAGE_MUSIC

音乐

AUDIOSTREAM_USAGE_COMMUNICATION

通话

AUDIOSTREAM_USAGE_VOICE_ASSISTANT

语音助手

AUDIOSTREAM_USAGE_ALARM

闹钟

AUDIOSTREAM_USAGE_VOICE_MESSAGE

语音消息

AUDIOSTREAM_USAGE_RINGTONE

铃声

AUDIOSTREAM_USAGE_NOTIFICATION

通知

AUDIOSTREAM_USAGE_ACCESSIBILITY

无障碍

AUDIOSTREAM_USAGE_MOVIE

视频

AUDIOSTREAM_USAGE_GAME

游戏

AUDIOSTREAM_USAGE_AUDIOBOOK

有声读物

AUDIOSTREAM_USAGE_NAVIGATION

导航


如何处理音频焦点抢占问题

音频焦点处理策略整体交给系统自动管理了,但是由于是系统自动触发的,应用需要监听相关事件,修改页面显示状态,例如:

1. 音乐播放过程中被其他音频打断自动停止播放,这时候页面的播放状态需要显示暂停,页面的状态不由系统管控,需要应用监听相关事件做状态修改;

2. 音乐播放过程被其他闹钟或者来电铃声等内容打断时需要恢复。

针对系统提供的几种音频播放方式,分别有提供对应的音频焦点事件,具体可以查看文档多音频播放的并发策略 - 监听音频打断事件

音频中断类型

枚举值

说明

AUDIOSTREAM_INTERRUPT_HINT_NONE

不提示

AUDIOSTREAM_INTERRUPT_HINT_RESUME

恢复流提示

AUDIOSTREAM_INTERRUPT_HINT_PAUSE

暂停流提示

AUDIOSTREAM_INTERRUPT_HINT_STOP

停止流提示

AUDIOSTREAM_INTERRUPT_HINT_DUCK

短暂降低音量

AUDIOSTREAM_INTERRUPT_HINT_UNDUCK

恢复音量


当应用程序监听到音频焦点事件,触发暂停和恢复流的情况时,通常需要在应用内部调用相应的音频播放和暂停方法来实现音频的暂停和恢复。

在触发暂停的音频焦点事件时,系统可能会自动暂停当前应用程序的音频播放,但这并不保证所有设备和操作系统都会以相同的方式处理。为了确保一致性和最佳用户体验,建议在应用内部显式调用暂停方法来停止音频播放,并更新应用界面以反映播放状态的变化。

而在触发恢复流的音频焦点事件时,系统通常不会自动恢复音频播放。应用程序需要通过监听焦点事件的回调函数,在收到恢复流焦点事件时,调用应用内部的音频播放方法来恢复播放。这样可以确保应用程序根据焦点事件的变化来控制音频的播放状态,并提供一致的用户体验。

1. 针对OpenSLES做的音频播放内容,由于系统未提供音频播放类型以及音频焦点事件,无法在触发系统音频焦点策略之后,应用做相应处理,以及无法做到想要的焦点策略,例如游戏声音和音乐共存,以及导航音等焦点策略,故需要采用系统提供的OHAudio接口处理

2. 截止当前Developer Beta1版本 AVPlayer提供的NDK接口中还不能设置音频类型,以及监听焦点事件,默认采用是音乐类型,ArkTS接口中提供audioRendererInfo属性可配置音频渲染通道指定音频类型

应用切前后台时的音频行为

应用切前后台时,应用其实主要表现为下述几种行为:

1. 应用切后台暂停,切回前台继续播放 -- 游戏音效场景,当前应用未申请长时任务情况下,应用切后台后,应用进程冻结,音频播放会暂停,但是切回前台不会自动播放,需要应用主动调用继续播放

2. 应用切后台不暂停继续播放 -- 音乐类软件,申请长时任务之后,应用后台继续播放

在大多数情况下,当音频播放应用切换到后台时,系统会自动暂停音频播放。然而,当应用切回前台时,系统不会自动触发音频的恢复播放。

分享
微博
QQ
微信
回复
2024-06-14 22:49:36
相关问题
音频流的音频焦点的请求和释放
606浏览 • 1回复 待解决
如何判断音频焦点的获取和丢失?
4656浏览 • 1回复 待解决
监听音频打断事件,该如何处理
451浏览 • 1回复 待解决
如何监听TextInput是否获得焦点
686浏览 • 1回复 待解决
OH _Audio播放音频问题
673浏览 • 1回复 待解决
鸿蒙 如何使用 player 播放网络音频
6055浏览 • 1回复 已解决
AudioCapturer录音+AudioRenderer播放音频
662浏览 • 1回复 待解决
音频播放长时任务不生效
638浏览 • 1回复 待解决
使用AudioRenderer开发音频播放功能
499浏览 • 1回复 待解决
SoundPool实现音频播放功能
633浏览 • 1回复 待解决
注册监听关机事件,该如何处理
446浏览 • 1回复 待解决
鸿蒙-如何实现播放一段音频
9854浏览 • 2回复 待解决
AVplayer开发音频播放功能
498浏览 • 1回复 待解决
AVPlayer实现音频播放(c++侧)
443浏览 • 1回复 待解决
使用AudioRenderer播放pcm音频流失败
651浏览 • 1回复 待解决
怎么使用player播放网络音频呢?
2358浏览 • 1回复 待解决
音频录制开发相关问题
4492浏览 • 1回复 待解决