问题背景:
Android R Automotive版本开发车机过程中,想要实现多通路音频输出,正常选择了一个通路对应speaker这个output device,另外一个通路选择了wired headset作为output device,此时遇到一个问题,Android的机制有一个音量检查的问题,耳机在这里不符合这个检查,因此配置耳机通路的这一路在调节音量的时候不能调节到最大音量,正常在手机上会弹出一个窗口让用户手动选择,但是Automotive版本这个弹窗被关闭了,解决该问题需要做如下修改:
// ./frameworks/base/services/core/java/com/android/server/audio/AudioService.java
private boolean checkSafeMediaVolume(int streamType, int index, int device) {
synchronized (mSafeMediaVolumeStateLock) {
+ // close safe MediaVolume in car
+ return true;
// if ((mSafeMediaVolumeState == SAFE_MEDIA_VOLUME_ACTIVE)
// && (mStreamVolumeAlias[streamType] == AudioSystem.STREAM_MUSIC)
// && (mSafeMediaVolumeDevices.contains(device))
// && (index > safeMediaVolumeIndex(device))) {
// return false;
// }
// return true; // 这些如果不注释掉java编译的时候会报错,不能访问的代码对虚拟机来说是错误的
}
}