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应该暂停或者降低音量,以便用户听到新的声音播放。
  • 当音频播放完后自动遗弃焦点。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值