LSPosed 模块,阻止 VoIP 应用劫持系统音频路由,保护后台媒体播放质量。
VoIP 应用(微信、QQ、KOOK 等)通话时会强制系统进入 MODE_IN_COMMUNICATION,导致:
- 后台媒体音质严重劣化(蓝牙 SCO 下尤为严重,48kHz+ 降至 8/16kHz)
- 音频焦点抢占,背景音乐被压低或暂停
- 强制单声道降混
部分厂商(如三星 Sound Assistant)提供了多音源开关,但大多数系统没有原生解决方案。adb appops set TAKE_AUDIO_FOCUS ignore 在较新的 Android 版本上也已失效。
通过 LSPosed 在目标应用进程内 Hook Android 音频 API:
| Hook | 作用 |
|---|---|
| AudioModeHook | setMode(IN_COMMUNICATION/IN_CALL) → MODE_NORMAL |
| AudioAttributesHook | USAGE_VOICE_COMMUNICATION → USAGE_MEDIA,CONTENT_TYPE_SPEECH → CONTENT_TYPE_MUSIC |
| AudioFocusHook | 拦截 requestAudioFocus,伪造成功而不实际抢占焦点 |
| AudioTrackHook | STREAM_VOICE_CALL → STREAM_MUSIC,AudioSource.VOICE_COMMUNICATION → MIC |
默认内置以下应用的作用域:
- 微信 (
com.tencent.mm) - QQ (
com.tencent.mobileqq) - KOOK (
com.kookapp.app) - OOPZ (
com.weilaishanhai.oopz) - Mumla (
se.lublin.mumla)
模块使用动态作用域,理论上适用于任何会抢占音频通信模式的 VoIP 应用,可在 LSPosed Manager 中自行添加作用域,并在模块设置界面按应用开关。
- 请勿将 System Framework、Telecom、Bluetooth 加入作用域,否则会影响正常通话
- 通话时建议使用有线/蓝牙耳机,因为通信模式的回声消除 (AEC) 会被跳过
- NDK 层的
AAudioStream调用不在 Hook 范围内
MIT