android 之 AudioManager

一、音频工作模式

直接影响音频路由(如听筒/扬声器切换)、电话行为及系统混音策略。以下是其关键要点详解:

一、核心功能与作用

音频路由控制
根据不同的
mode
值,系统自动切换音频输入/输出设备。例如:


MODE_IN_CALL
:强制使用听筒或耳机通话,避免扬声器外放。

MODE_IN_COMMUNICATION
:支持灵活切换设备(如蓝牙耳机或扬声器),适用于 VoIP 通话。

行为适配
不同模式会改变系统对音频流的处理逻辑:


MODE_RINGTONE
:优先播放铃声,暂停后台音乐。

MODE_NORMAL
:恢复普通媒体播放状态。

电话层协同
部分模式(如
MODE_IN_CALL
)会激活基带芯片的音频通道,确保通话质量。

二、支持的音频模式常量

常量名称 用途说明 典型场景

MODE_NORMAL

0
普通模式
非通话、非铃声的默认状态,媒体播放、游戏等场景使用此模式。
播放音乐、视频时

MODE_RINGTONE

1
铃声模式
设备响铃或通知时激活,系统会调整音量策略以突出铃声。
来电响铃、消息提醒

MODE_IN_CALL

2
通话模式
传统语音通话中启用,优化麦克风和听筒的音频路由。
接听普通电话

MODE_IN_COMMUNICATION

3
通信模式
用于 VoIP、视频通话等实时通信场景,支持更灵活的音频设备切换(如强制扬声器)。
微信语音、Zoom 会议

MODE_CALL_SCREENING

4
通话筛选模式
系统自动接听并过滤骚扰电话时启用(如AI助理接听)。
防骚扰电话拦截

MODE_CALL_REDIRECT

5
呼叫转移模式
通话被转移至其他设备时激活(如手机来电转接到耳机)。
多设备协同接听

MODE_COMMUNICATION_REDIRECT

6
通信重定向模式
将通信音频(如VoIP)重定向到指定设备(需配合
setCommunicationDevice()
使用)。
会议音频定向输出至音箱

注意


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
中调用无效。

版本兼容性


MODE_IN_COMMUNICATION
需 Android 3.0+(API 11)。

MODE_CALL_REDIRECT
等新增常量需 Android 10+(API 29)。

四、典型应用场景

语音通话类应用


// 来电响铃时
audioManager.setMode(AudioManager
© 版权声明

相关文章

暂无评论

none
暂无评论...