Andriod音频系统适配《java逻辑控制层》

Android系统针对不同设备,不同Stream类型的音频设备的适配还是比较完善的。

按照高级音响设备的格局,Android定义了UseMasterVolume 和StreamVolume,但是在实际使用中我们用的还是按照StreamVolume的方式分别设置。很少使用直接的MasterVolume来控制所有设备的输出的音量。

在介绍整个音量控制逻辑之前,先看一张图引用别人的(https://blog.csdn.net/yangwen123/article/details/39502689):

也就是说通过AudioManager.java所调用的接口的最终实现是在AudioSystem.java里面,由此走向Native层。

按照经验而言,java层实现控制逻辑,Native层实现功能接口的推论,目前我们只看音量控制的逻辑层,即java层。

1.首先来看看setMaterVolume的整个调用过程

AudioManager

SetMasterVolume

AudioService

SetMasterVolume

AudioSystem

简单明了,长驱直入,不需要逻辑解释。         

2.研究StreamVolume的逻辑控制               

看图:

上图所示,所有的StreamType,经历了   分——〉合——〉分  的过程。

现在如图所示的StreamType层,各个stream是分开的,然后选择不同的Alias抱团,紧接着同一个Alias团的成员分别作相同的事情:调用AudioSystem来设置自己的音量。

看完图来看代码,看最关键的代码:

AudioManager.java提供的接口

中间省略......................

会调用到

AudioService.java

StreamState.java

既然出现了,第一次的分和最后一次的分,那么中间的合在哪里?

猜你喜欢

转载自blog.csdn.net/u011494885/article/details/81537122