实现音频焦点功能

介绍

本示例基于AudioSessionManager提供的能力,实现了通过AudioSession主动管理应用内音频流的焦点、自定义本应用音频流的焦点策略、调整本应用音频流释放音频焦点的时机等功能,包含了功能调用接口的完整链路。

效果图预览

图1:主界面

  • 依次点击'初始化audioRenderer'、'监听audioRenderer焦点变化'、'开始播放'按钮,即可使用默认焦点策略播放音频。
  • 依次点击'初始化audioRenderer'、'监听audioRenderer焦点变化'、'使用音频会话修改焦点策略'、'开始播放'按钮,即可使用音频会话修改焦点策略并播放音频。
  • 依次点击'初始化audioRenderer'、'使用音频会话申请焦点策略'、'开始播放'按钮,即可使用音频会话申请焦点策略并播放音频。
  • 依次点击'初始化audioRenderer'、'使用音频会话修改焦点策略'、'开始播放'、'切换到听筒播放'按钮,即可切换到听筒播放音频。
  • 音频会话激活后,依次点击'初始化audioCapturer'、'开始录制'、'设置会话录音静音提示'按钮,即可调用audioSessionManager.setCapturerMuteHint上报会话级录音流静音提示;点击'解除会话录音静音提示'按钮即可解除提示。该接口不会实际触发静音,仅告知音频系统当前会话内录音流已由应用静音或期望按静音状态处理。
  • 播放时依次点击'停止播放'、'停用音频会话'按钮,即可结束本次会话。

工程结构&模块类型

├───entry/src/main/ets
│   ├───entryability                        
│   │   ├───EntryAbility.ets                // Ability的生命周期回调内容。
│   ├───entrybackupability                  
│   │   └───EntryBackupAbility.ets          // BackupAbility的生命周期回调内容。
│   ├───pages                               
│       └───Index.ets                       // 主界面。
└───entry/src/main/resources                // 资源目录。

具体实现

使用 AudioSession 管理应用音频焦点

  • 源码参考:Index.ets
  • 使用流程:
    • 点击'初始化audioRenderer'按钮,调用audio.createAudioRenderer创建audioRenderer对象。
    • 点击'监听audioRenderer焦点变化'按钮,调用audioRenderer.on('audioInterrupt')注册监听焦点变化。
    • 点击'使用音频会话修改焦点策略'按钮,首先配置焦点策略为CONCURRENCY_MIX_WITH_OTHERS,接着调用audioSessionManager.activateAudioSession激活音频焦点,然后通过audioSessionManager.on('audioSessionDeactivated')监听音频会话停用事件。
    • 点击'使用音频会话申请焦点策略'按钮,首先设置音频会话场景为AUDIO_SESSION_SCENE_MEDIA并配置焦点策略为CONCURRENCY_MIX_WITH_OTHERS,接着调用audioSessionManager.enableMuteSuggestionWhenMixWithOthers接口后调用audioSessionManager.activateAudioSession激活音频焦点,然后通过audioSessionManager.on('audioSessionStateChanged')监听AudioSession焦点和状态变化事件。
    • 点击'初始化audioCapturer'按钮,申请麦克风权限并创建一条录音流;点击'开始录制'按钮,调用audioCapturer.start启动录音流。录音流处于运行状态后,点击'设置会话录音静音提示'按钮,调用audioSessionManager.setCapturerMuteHint(true)告知音频系统当前会话内录音流已由应用业务侧静音或期望按静音状态处理;点击'解除会话录音静音提示'按钮,调用audioSessionManager.setCapturerMuteHint(false)解除提示。该接口从API version 24开始支持,不会实际触发录音流静音。
    • 点击'开始播放'按钮,调用audioRenderer.start开始播放音频。
    • 点击'切换到听筒播放'按钮,调用audioSessionManager.setDefaultOutputDevice切换到听筒播放音频。
    • 点击'停止播放'按钮,调用audioRenderer.stop停止播放音频。
    • 点击'释放audioCapturer'按钮,停止并释放会话中的录音流。
    • 点击'停用音频会话'按钮,首先调用audioSessionManager.off来取消所有监听事件,再调用audioSessionManager.deactivateAudioSession结束当前应用的音频会话。

相关权限

麦克风使用权限:ohos.permission.MICROPHONE

模块依赖

不涉及。

约束与限制

  1. 本示例支持在标准系统上运行,支持设备:RK3568。

  2. 本示例支持API version 20,版本号: 6.0.0.43。

  3. 本示例已支持使Build Version: 6.0.0.43, built on August 24, 2025。

  4. 高等级APL特殊签名说明:无。