在bluedroid/fluoride中关闭AVRCP CT侧的Absolute Volume

在AVRCP Profile中,有一个absolute volume功能,用于在CT侧和TG侧同步音量设置,简单概括来说,就是当手机端音量被调节时,通知耳机侧当前的音量数值,根据specification原文,其原意是为了让对侧能够显示当前音量。

在bluedroid/fluoride中,会根据收到的音量通知来调节本地的音量,但一些产品不希望本地的音量跟着对侧变,这就需要一个开关能关闭这个功能,起先我考虑的是屏蔽这个通知,但仅仅屏蔽通知是不够的,手机端仍不会调整输出音频流的增益,导致的现象就是调节手机端音量在车机侧没有任何效果。

最终我发现关闭此功能有两个关键点,第一是在AVCTP 通道创建初期的getcapabilities,bluedroid/fluoride 默认告诉对方自己的能力包含absolute volume,在这个地方加一个系统属性,在运行时通过判断该属性来决定回应的内容是否包含absolute volume,同时也不要向手机端发送注册绝对音量的通知的请求, 只有这样,手机端判定对方不支持绝对音量,才会调整自身输出音频流的增益,第二才是通过控制通知给上层(java层)的属性rc_features,根据前述系统属性的值决定是否取消BTA_AV_FEAT_CTRL这个属性,来告知上层,不支持absolute volume,这样就不会在车机端音量变化时,向下发出通知绝对音量变化的消息。

你可能感兴趣的:(在bluedroid/fluoride中关闭AVRCP CT侧的Absolute Volume)