谁在 android 中选择 AUDIO_DEVICE_OUT_SPEAKER 常量(在什么条件下)?

Who selects AUDIO_DEVICE_OUT_SPEAKER constant in android (on what conditions)?

音频 HAL 可能因平台而异,在某些情况下因 OEM 不同(我曾经在索尼从事音频 HAL 和框架的工作,我们进行了一些自定义以使路由与早期产品一致,并添加索尼自己的音频效果等)。

无论如何,音频 HAL 通常会包含一个 策略管理器,它根据当前用例(语音通话、音乐播放、通知播放)做出高级路由决策)、您附加的附件等。在我使用过的音频策略管理器的所有实现中,都有一个 getDeviceForStrategy 方法来执行此选择。 Here's one implementation 这种方法,您可能会在某些基于 Qualcomm 的设备上找到这种方法(可能有一些自定义设置)。

请注意,简单地添加一个新的 AUDIO_DEVICE_OUT_ 常量并在某些条件下在策略管理器中选择它不会对您有任何好处。您还必须在 HAL 中进行其他更改,以将您的新设备映射到一组参数,从而在硬件级别启用适当的声音路径。有关更多信息,请参阅 my earlier answer 关于创建替代声音路径的内容。