1. CarAudio
- Google Automotive Audio: https://source.android.google.cn/devices/automotive/audio
- configure-volume: https://source.android.google.cn/devices/automotive/audio/audio-control#configure-volume
- configure-volume-groups: https://source.android.google.cn/devices/automotive/audio/audio-control#configure-volume-groups
- configure-audio-devices: https://source.android.google.cn/devices/automotive/audio/audio-hal#configure-audio-devices
下图摘自上述地址:
2. CarAudioService
2.1 类图
2.2 流程图
2.3 构造函数
这里读取配置文件audioUseDynamicRouting确定是否使用动态Routing。
public CarAudioService(Context context) {
mContext = context;
mTelephonyManager = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
mUseDynamicRouting = mContext.getResources().getBoolean(R.bool.audioUseDynamicRouting);
}
2.4 setupDynamicRouting
当mUseDynamicRouting为true时,将调用setupDynamicRouting函数;该函数里会创建一个AudioPolicy ,并通过mAudioManager.registerAudioPolicy函数注册该AudioPolicy。
private void setupDynamicRouting() {
final IAudioControl audioControl = getAudioControl();
if (audioControl == null) {
return;
}
AudioPolicy audioPolicy = getDynamicAudioPolicy(audioControl);
int r = mAudioManager.registerAudioPolicy(audioPolicy);
if (r != AudioManager.SUCCESS) {
throw new RuntimeException("registerAudioPolicy failed " + r);
}
mAudioPolicy = audioPolicy;
}
2.5 AudioManager::registerAudioPolicy
public int registerAudioPolicy(@NonNull AudioPolicy policy) {
if (policy == null) {
throw new IllegalArgumentException("Illegal null AudioPolicy argument");
}
final IAudioService service = getService();
try {
String regId = service.registerAudioPolicy(policy.getConfig(), policy.cb(),
policy.hasFocusListener(), policy.isFocusPolicy(), policy.isVolumeController());
if (regId =&#