在做方案时,经常遇到客户需要预装第三方软件,由于第三方软件千奇百怪,没有经过适配不一定可以直接使用,即使可以使用也可能存在一些问题。
今遇到客户要求使用Teams、Zoom等会议视频软件,视频软件最重要的就是视频通话、语音通话。直接安装软件后发现,通话时无声音。
通过跟踪分析发现,framework下在处理声音时,有些config需要适配,否则声音不会输出。这个config主要是声音通道的切换,第三方软件大部分都使用的是喇叭输出。
对于遇到的问题,本人只作了很小的改动。
文件路径:frameworks/base/services/core/java/com/android/server/audio/AudioService.java
思路:在处理消息MSG_SET_FORCE_USE和MSG_SET_FORCE_BT_A2DP_USE时,把两者分开来,系统原生的是一起处理的。调用函数setForceUse时,传递的参数强制转化为AUDIO_POLICY_FORCE_SPEAKER,即第二个参数为0即可。
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_SET_DEVICE_VOLUME:
setDeviceVolume((VolumeStreamState) msg.obj, msg.arg1);
break;
case MSG_SET_ALL_VOLUMES:
setAllVolumes((VolumeStreamState) msg.obj);
break;
case MSG_PERSIST_VOLUME:
persistVolume((VolumeStreamState) msg.obj, msg.arg1);
break;
case MSG_PERSIST_RINGER_MODE:
// note that the value persisted is the current ringer mode, not the
// value of ringer mode as of the time the request was made to persist
persistRingerMode(getRingerModeInternal());