一、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流程分析
待更新