• Android Audio 焦点


    Audio焦点

    1.音频焦点管理准则

    • 在播放之前调用requestAudioFocus(),并验证调用是否返回AUDIOFOCUS_REQUEST_GANTED。同时注册监听音频焦点丢失的通知
    • 在其他应用请求焦点时,应该暂停或者降低当前音源音量。
    • 在播放完毕或者停止后,应该放弃焦点。

    2.音频焦点在不同Android版本上的处理方式

    • Android 2.2(API 8 )开始,app通过requestAudioFocus()和abandonAudioFocus()来管理音频焦点,并且还需要为这两个方法注册AudioManager.OnAudioFocusChangeListener接口用于回调管理音量。
    • Android 5.0(API 21)之后,app通过AudioAttributes来描述app正在播放的音频类型。如:播放语音CONTENT_TYPE_SPEECH。
    • Android 8.0(API 26)之后,使用requestAudioFocus()方法,该方法需要接收AudioFocusRequest参数,该参数包含当前stream上下文,功能等基本参数。系统使用这些信息来自动管理音频焦点的获取和丢失。

    3.焦点变化回调AudioFocusChangeListener

    app获取焦点之后,必须在其他app请求焦点时释放焦点。这种情况下,app会收到AudioFocusChangeListener的onAudioFocusChange()的回调,该方法在调用requestAudioFocus时指定。
    onAudioFocusChange()中包含focusChange参数,表示焦点更改类型,根据更改类型做出符合情况的响应:

    • 暂时失去焦点:AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK或者AUDIOFOCUS_LOSS_TRANSIENT,如果是这两个类型,当前应用播放的声音应该降低音量或者暂停播放,在是去焦点的这段时间,当前应用应该继续监听焦点的变化,并准备重新获取焦点恢复正常播放,当抢占焦点的app放弃焦点时,当前应用会收到回调AUDIOFOCUS_GAIN。
    • 永久失去焦点:AUDIOFOCUS_LOSS,如果是这个类型,其他应用播放时,当前app应该暂停播放,因为不会收到AUDIOFOCUS_GAIN的回调。如果需要重新开始播放,则必须重新进行播放操作。

    Note

    • 一个app在请求获取焦点之后,可能无法一直持有焦点到音频播放结束,因为在当前的播放过程中,其他app有可能会请求焦点,从而占有上一个app持有的焦点。这种情况下,当前的app应该暂停或者降低音量,以便用户听到新的声音播放。
    • 当音频播放完后自动遗弃焦点。
  • 相关阅读:
    代码随想录算法训练营第五十一天| 121. 买卖股票的最佳时机 122.买卖股票的最佳时机II
    chatgpt赋能python:Python改定位:从脚本语言到全栈语言的转变
    手写 Attention & 迷你LLaMa2——LLM实战
    FinGPT:开源金融大型语言模型
    CentOS8 ModelScope的安装与使用
    面了个 Java 实习生,小伙很优秀!
    Config 分布式配置中心
    Postgres 史上最垃圾的高可用软件之 - CLup
    农场管理小程序|基于微信小程序的农场管理系统设计与实现(源码+数据库+文档)
    【动手深度学习-笔记】R-CNN系列
  • 原文地址:https://blog.csdn.net/zhaohuiyang_949/article/details/127659059