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

待更新

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值