Android AudioFocus

一、AudioFocus相关接口

IAudioFocusDispatcher

AIDL for the AudioService to signal audio focus listeners of focus updates.

音频服务的 AIDL,用于向焦点更新的音频焦点侦听器发出信号。

IAudioFocusDispatcher代码位于:

frameworks/base/media/java/android/media/IAudioFocusDispatcher.aidl

IAudioFocusDispatcher的定义:

interface IAudioFocusDispatcher {
void dispatchAudioFocusChange(int focusChange, String clientId);
void dispatchFocusResultFromExtPolicy(int requestResult, String clientId);
}

二、AudioFocus相关类

AudioFocusRequest

AudioFocusRequest是Android中用于请求音频焦点的类。应用程序可以通过这个类向系统请求获取其所需的音频焦点,并指定在获取或失去音频焦点时自己的行为。

AudioFocusRequest代码位于:

frameworks/base/media/java/android/media/AudioFocusRequest.java

AudioFocusRequest的定义:

public final class AudioFocusRequest {}

AudioFocusInfo

AudioFocusInfo是Android中用于描述音频焦点信息的一个类,它记录了应用程序请求音频焦点的详细信息以及当前与焦点相关的音频流信息。

AudioFocusInfo 代码位于:

frameworks/base/media/java/android/media/AudioFocusInfo.java

AudioFocusInfo 的定义:

public final class AudioFocusInfo implements Parcelable {}

FocusRequester

FocusRequester类用来处理有关音频焦点用户的所有信息。每个实例的生命周期由 android.media.MediaFocusControl 管理,从添加到音频焦点堆栈或外部焦点策略的焦点所有者映射到发布。

FocusRequester代码位于:

frameworks/base/service/java/com/android/server/audio/FocusRequester.java

FocusRequester的定义:

public class FocusRequester {}

MediaFocusControl

MediaFocusControl是一个用于控制应用程序之间音频焦点的管理器,在多个应用程序同时使用音频设备时,通过MediaFocusControl可以让系统可控地管理每个应用程序的音频焦点,确保每个应用程序按照规定的方式同时使用音频设备。MediaFocusControl可以跟踪每个应用程序的音频焦点状态,并根据优先级和程序的需求来管理各个应用程序之间的音频焦点。

MediaFocusControl代码位于:

frameworks/base/service/java/com/android/server/audio/MediaFocusControl.java

MediaFocusControl的定义:

public class MediaFocusControl implements PlayerFocusEnforcer {}

三、AudioFocus相关方法

AudioManager方法

  • int requestAudioFocus(AudioFocusRequest focusRequest):请求音频的焦点。

  • int requestAudioFocus(AudioFocusRequest afr, AudioPolicy ap):请求音频的焦点。

  • int requestAudioFocus(OnAudioFocusChangeListener l,int streamType,int durationHint):请求音频的焦点。

  • int requestAudioFocus(OnAudioFocusChangeListener l, AudioAttributes requestAttributes, int durationHint, int flags) :请求音频的焦点。

  • int requestAudioFocus(OnAudioFocusChangeListener l, AudioAttributes requestAttributes, int durationHint, int flags, AudioPolicy ap):请求音频的焦点。

  • int abandonAudioFocus(AudioFocusRequest focusRequest):放弃音频焦点

  • int abandonAudioFocus(AudioManager.OnAudioFocusChangeListenerl):放弃音频的焦点。

  • interface OnAudioFocusChangeListener{void onAudioFocusChange(int focusChange)}:音频焦点变化监听器

AudioService方法

  • int requestAudioFocus(AudioFocusRequest focusRequest):请求音频的焦点。

  • int requestAudioFocus(AudioManager.OnAudioFocusChangeListener l,int streamType,int durationHint):请求音频的焦点。

  • int abandonAudioFocus(AudioFocusRequest focusRequest):放弃音频焦点

  • int abandonAudioFocus(AudioManager.OnAudioFocusChangeListenerl):放弃音频的焦点。

  • interface OnAudioFocusChangeListener{void onAudioFocusChange(int focusChange)}:音频焦点变化监听器

四、AudioFocus流程分析

音频焦点是指Android中通过音频系统来管理各种应用程序之间的音频播放。在Android中,默认情况下同一时间只有一种应用程序或服务能够获得系统的音频焦点,而其他的应用程序则被迫停止或暂停音频播放。通过音频焦点机制,应用程序可以协调不同的音频播放请求,以避免音频播放产生的冲突和干扰。

下面我们通过代码来分析如何控制音频焦点。

requestAudioFocus流程分析

待更新

abandonAudioFocus流程分析

待更新

setFocusRequestResult流程分析

待更新

dispatchAudioFocusChange流程分析

待更新

  • 29
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值