android 之 AudioManager
一、音频工作模式
直接影响音频路由(如听筒/扬声器切换)、电话行为及系统混音策略。以下是其关键要点详解:
一、核心功能与作用
音频路由控制
根据不同的 值,系统自动切换音频输入/输出设备。例如:
mode
:强制使用听筒或耳机通话,避免扬声器外放。
MODE_IN_CALL
:支持灵活切换设备(如蓝牙耳机或扬声器),适用于 VoIP 通话。
MODE_IN_COMMUNICATION
行为适配
不同模式会改变系统对音频流的处理逻辑:
:优先播放铃声,暂停后台音乐。
MODE_RINGTONE
:恢复普通媒体播放状态。
MODE_NORMAL
电话层协同
部分模式(如 )会激活基带芯片的音频通道,确保通话质量。
MODE_IN_CALL
二、支持的音频模式常量
| 常量名称 | 值 | 用途说明 | 典型场景 |
|---|---|---|---|
|
|
普通模式 非通话、非铃声的默认状态,媒体播放、游戏等场景使用此模式。 |
播放音乐、视频时 |
|
|
铃声模式 设备响铃或通知时激活,系统会调整音量策略以突出铃声。 |
来电响铃、消息提醒 |
|
|
通话模式 传统语音通话中启用,优化麦克风和听筒的音频路由。 |
接听普通电话 |
|
|
通信模式 用于 VoIP、视频通话等实时通信场景,支持更灵活的音频设备切换(如强制扬声器)。 |
微信语音、Zoom 会议 |
|
|
通话筛选模式 系统自动接听并过滤骚扰电话时启用(如AI助理接听)。 |
防骚扰电话拦截 |
|
|
呼叫转移模式 通话被转移至其他设备时激活(如手机来电转接到耳机)。 |
多设备协同接听 |
|
|
通信重定向模式 将通信音频(如VoIP)重定向到指定设备(需配合 使用)。 |
会议音频定向输出至音箱 |
注意:
(
MODE_INVALID)和
-2(
MODE_CURRENT)为系统内部状态,开发者不可直接设置。
-1
高权限模式(如)需声明
MODE_IN_CALL(系统级应用权限)。
android.permission.MODIFY_PHONE_STATE
三、使用限制与注意事项
非通用性设计
官方强调: 应仅由 系统级音频管理应用 或 电话应用 使用。普通应用滥用可能导致音频路由冲突。
setMode()
状态切换需手动管理
系统不会自动切换模式,开发者需根据场景显式设置:
// 示例:VoIP 通话的生命周期管理
audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION); // 通话开始
audioManager.setMode(AudioManager.MODE_NORMAL); // 通话结束
扬声器控制依赖模式
启用扬声器 () 仅在特定模式下生效:
setSpeakerphoneOn(true)
或
MODE_IN_CALL 下才可切换扬声器。
MODE_IN_COMMUNICATION
中调用无效。
MODE_NORMAL
版本兼容性
需 Android 3.0+(API 11)。
MODE_IN_COMMUNICATION
等新增常量需 Android 10+(API 29)。
MODE_CALL_REDIRECT
四、典型应用场景
语音通话类应用
// 来电响铃时
audioManager.setMode(AudioManager


