一、AudioManager相关类
1、AudioManager
AudioManager是Android系统提供的一个与音频相关的管理类,可以用于控制应用程序与系统的音频交互。它可以管理音频路由、控制音量、播放和暂停音频等操作。具体来说,AudioManager提供了以下几个方面的功能:
1、音频路由管理:可以访问系统的音频路由列表,并设置当前活动的音频路由。
2、音量管理:可以获取和设置当前的音量、静音状态和音量变化的监听器等。
3、音频焦点管理:可以控制播放和暂停音频、获取和释放音频焦点,保证优先级最高的音频应用程序能够正常工作。
4、铃声管理:可以设置铃声模式、获取铃声音量等。
5、回声消除:可以通过开启回声消除特性,消除声音和语音通话中出现的回声问题。
AudioManager 代码位于:
frameworks/base/media/java/android/media/AudioManager.java
AudioManager 的定义:
public class AudioManager {
private class ServiceEventHandlerDelegate {}
private static final class SafeWaitObject {}
private static final class BlockingFocusResultReceiver {}
public static abstract class AudioPlaybackCallback {}
private static class AudioPlaybackCallbackInfo {}
private final static class PlaybackConfigChangeCallbackData {}
public static abstract class AudioRecordingCallback {}
private static class AudioRecordingCallbackInfo {}
private final static class RecordConfigChangeCallbackData {}
private class OnAmPortUpdateListener implements AudioManager.OnAudioPortUpdateListener {}
public abstract static class AudioServerStateCallback {}
public abstract static class VolumeGroupCallback {}
private final class CommunicationDeviceDispatcherStub
extends ICommunicationDeviceDispatcher.Stub implements CallbackUtil.DispatcherStub {}
class CallInjectionModeChangedListener implements OnModeChangedListener {}
public abstract static class MuteAwaitConnectionCallback {}
private final class MuteAwaitConnectionDispatcherStub {}
private class NativeEventHandlerDelegate {}
public interface OnAudioFocusChangeListener {
public void onAudioFocusChange(int focusChange);
}
}
二、AudioManager API
AudioManager API如下:
音量相关
-
void adjustVolume(int direction,int flags):调整最相关的数据流的音量。
-
void adjustStreamVolume(int streamType, int direction, int flags):调整指定类型的声音。
-
void setStreamVolume (int streamType, int index, int flags):直接设置指定类型的音量值。
-
void setStreamMute(int streamType,booleanstate):将指定类型的声音调整为静音。
-
int getStreamVolume(int streamType):返回特定数据流的当前音量索引。
-
int getStreamMaxVolume(int streamType):返回特定流的最大音量指数。
麦克风相关
-
setMicrophoneMute(boolean on):设置是否让麦克风静音。
-
boolean isMicrophoneMute():检查是否打开或关闭麦克风静音。
音频焦点相关
-
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)}:音频焦点变化监听器
音频配置信息相关
-
void registerAudioRecordingCallback(@NonNull AudioRecordingCallback cb, Handler handler);注册AudioRecording回调
-
void unregisterAudioRecordingCallback(@NonNull AudioRecordingCallback cb);解除注册AudioRecording回调
-
List<AudioRecordingConfiguration> getActiveRecordingConfigurations():获取音频录制的相关配置信息。
-
void registerAudioPlaybackCallback(@NonNull AudioPlaybackCallback cb, Handler handler);注册registerAudioPlaybackCallback回调
-
void unregisterAudioPlaybackCallback(@NonNull AudioPlaybackCallback cb) ;解除注册registerAudioPlaybackCallback回调
-
List<AudioPlaybackConfiguration> getActivePlaybackConfigurations() ;获取音频播放任务的相关配置信息。
按键音相关
-
public void playSoundEffect(@SystemSoundEffect int effectType):播放按键音
-
public void playSoundEffect(@SystemSoundEffect int effectType, int userId) :播放按键音
-
public void playSoundEffect(@SystemSoundEffect int effectType, float volume) :播放按键音
-
public void loadSoundEffects() :加载按键音效
-
public void unloadSoundEffects() :卸载按键音效
其他
-
void setMode(int mode):设置声音模式。
-
int getMode():返回当前音频模式。
-
void setRingerMode(int ringerMode):设置手机电话铃声的模式。
-
int getRingerMode():返回当前的铃声模式。
-
void setParameters(String keyValuePairs):设置一个音频硬件数量可变的参数值。
-
String getParameters(String keys):给音频硬件设置一个varaible数量的参数值。
-
void setVibrateSetting (int vibrateType, int vibrateSetting):设置设置时应该振动的振动类型。
-
int getVibrateSetting(int vibrateType):返回是否该用户的振动设置为振动类型。
-
setSpeakerphoneOn(boolean on):设置扬声器打开或关闭。
-
isSpeakerphoneOn():检查是否打开或关闭扬声器。
-
boolean isMusicActive():检查是否有音乐处于活跃状态。
-
interface OnAudioFocusChangeListener:监听音频焦点变化。
-
interface OnModeChangedListener:监听音频模式的变化。
-
interface OnCommunicationDeviceChangedListener:监听连接设备变化。
其中setMode/getMode用于设置/获取音频管理器的工作模式,Mode定义如下:
模式(Mode) | 描述 |
---|---|
MODE_NORMAL | 普通模式,用于正常的音频播放 |
MODE_RINGTONE | 铃声模式,用于电话铃声播放 |
MODE_IN_CALL | 电话通话模式,用于电话通话时的音频管理 |
MODE_IN_COMMUNICATION | 通信模式,用于VoIP应用程序通话时的音频管理 |
其中setRingerMode/getRingerMode用于设定/获取ringerMode,ringerMode定义如下:
铃声模式(ringerMode) | 描述 |
---|---|
RINGER_MODE_SILENT | 静音模式,设备不会播放铃声,而是会震动、闪光或完全静音。 |
RINGER_MODE_VIBRATE | 震动模式,设备会震动而不播放铃声。 |
RINGER_MODE_NORMAL | 正常模式,设备播放指定的铃声。 |
其中setStreamVolume/adjustStreamVolume/getStreamVolume用于设定/获取Stream Volume,streamType定义如下:
streamType | 描述 |
---|---|
STREAM_ALARM | 闹钟 |
STREAM_DTMF | 双音多频,拨号键的 |
STREAM_MUSIC | 音乐,即媒体 |
STREAM_NOTIFICATION | 通知 |
STREAM_RING | 铃声 |
STREAM_SYSTEM | 系统 |
STREAM_VOICE_CALL | 通话 |
其中adjustVolume需要指定direction和Flag,direction定义如下:
direction | 描述 |
---|---|
ADJUST_RAISE | 增加音量 |
ADJUST_LOWER | 减小音量 |
ADJUST_MUTE | 静音 |
ADJUST_UNMUTE | 取消静音 |
Flag定义如下:
FLAG | 描述 |
---|---|
FLAG_SHOW_UI | 调整时显示音量条(就是按音量键出现的那个) |
FLAG_PLAY_SOUND | 改变音量时播放声音 |
FLAG_VIBRATE | 手机铃声进入振动铃声模式是否振动 |
FLAG_ALLOW_RINGER_MODES | 更改音量时是否切换模式,比如响铃音量设置为0时是否开启震动模式 |
FLAG_SHOW_SILENT_HINT | 由于静音模式,无法调整音量,请在用户界面中显示提示。 |
FLAG_ACTIVE_MEDIA_ONLY | 指示仅当媒体正在活动播放时才应处理此问题。 |
FLAG_SHOW_UI_WARNINGS | 就像FLAG_SHOW_UI,但是只有对话框警告和确认,没有滑块。 |
FLAG_SHOW_VIBRATE_HINT | 阻止将音量从振动调低,在用户界面中显示提示。 |
三、AudioManager流程分析
AudioManager setParameters流程分析
待更新
AudioManager setHfpEnabled流程分析
待更新
AudioManager setHfpVolume流程分析
待更新
AudioManager loadSoundEffects流程分析
待更新
AudioManager unloadSoundEffects流程分析
待更新
AudioManager playSoundEffect流程分析
待更新
AudioManager getStreamVolume流程分析
待更新
AudioManager setStreamVolume流程分析
待更新