Android AudioManager

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

待更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值