问题背景:
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编译的时候会报错,不能访问的代码对虚拟机来说是错误的
}
}
在Android Automotive版本开发中,遇到多通路音频输出的音量限制问题。当一个通路设置为speaker,另一通路设为wiredheadset时,由于安全机制,耳机通路音量无法调至最大。通常系统会提示用户手动调整,但在Automotive版本中此提示被禁用。为了解决这个问题,需要在AudioService.java中关闭安全媒体音量检查,通过注释或添加代码来实现。
2069

被折叠的 条评论
为什么被折叠?



