Android13蓝牙 停用绝对音量功能

Android13蓝牙 停用绝对音量功能

文章目录

  • Android13蓝牙 停用绝对音量功能
    • 一、前言
    • 二、代码实现分析过程
      • 1、查看SettingsLib源码资源
      • 2、查看原生Setitntgs 相关字符
        • (1)xml 布局文件中的显示
        • (2) java 代码文件中的控制
          • 串口上控制:
    • 三、总结

一、前言

Android13 Tv大屏设备出现了连接蓝牙后,蓝牙音箱声音特别大,并且调节蓝牙声音后,断开连接,再重新连接蓝牙声音还是很大。
从网上看到是可以打开设置里面的 “停用绝对音量功能” 进行规避这个问题。

看下网上对”停用绝对音量功能“的说明:

有时连接了蓝牙耳机,会出现声音突然变大的情况,这就是开启了绝对音量功能的原因。
如果“停用绝对音量功能”开启,那么蓝牙耳机的音量和手机的音量就是相互独立的。
如果“停用绝对音量功能”关闭,那么蓝牙耳机的音量和手机的音量就是相互同步的。(默认)

下面是原生Settings 中的字符串显示和图片:

Android13蓝牙 停用绝对音量功能_第1张图片
上面的画面具体位置在开发者选项中,不过也有的手机是没有这个选项的。比如华为手机!

具体字符串:


停用绝对音量功能
停用蓝牙绝对音量功能,以防在连接到远程设备时出现音量问题(例如音量高得让人无法接受或者无法控制音量等)。

网上看了下,没几个对实现控制代码进行分析的,刚好看了一圈代码,顺便分享一下。

二、代码实现分析过程

开发者选项中是有这个选项的,但是在Settings 里面未找到 开关的字符串,不过通过SettingsLib 工程可以看到对应的字符串。

1、查看SettingsLib源码资源

文件位置和对应资源:

framework\base\packages\SettingsLib\res\values-zh-rCN\strings.xml

"停用绝对音量功能"

2、查看原生Setitntgs 相关字符

(1)xml 布局文件中的显示

文件位置和对应布局文件:

packages\apps\Settings\res\xml\development_settings.xml



(2) java 代码文件中的控制

Java文件位置:


packages\apps\Settings\src\com\android\settings\development\BluetoothAbsoluteVolumePreferenceController.java

private static final String BLUETOOTH_DISABLE_ABSOLUTE_VOLUME_KEY = "bluetooth_disable_absolute_volume";

所以 控制“停用绝对音量功能”的代码基本可以确定是在 BluetoothAbsoluteVolumePreferenceController.java 这个类里面了。

继续查看Java文件,发现代码:

//prop字符串
static final String BLUETOOTH_DISABLE_ABSOLUTE_VOLUME_PROPERTY = "persist.bluetooth.disableabsvol";

//开关回调的地方
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
    final boolean isEnabled = (Boolean) newValue;
    SystemProperties.set(BLUETOOTH_DISABLE_ABSOLUTE_VOLUME_PROPERTY,
    isEnabled ? "true" : "false");
    return true;
}


所以啊所以,只需要设置 persist.bluetooth.disableabsvol 属性 true/false 就可以控制 “停用蓝牙绝对音量功能” !

串口上控制:

setprop persist.bluetooth.disableabsvol true / false //设置
getprop persist.bluetooth.disableabsvol  //获取


framework 源码中找不到关键字相关内容,在package 下找到了 !

再看看系统源码哪里做了具体事情,这里不做具体分析,需要的可以自行查阅:

android13/release/packages$ grep -nr persist.bluetooth.disableabsvol

modules/Bluetooth/system/profile/avrcp/connection_handler.cc:49:  osi_property_get("persist.bluetooth.disableabsvol", volume_disabled, "false");
modules/Bluetooth/system/btif/src/btif_rc.cc:5514:  osi_property_get("persist.bluetooth.disableabsvol", volume_disabled, "false");

apps/Settings/src/com/android/settings/development/BluetoothAbsoluteVolumePreferenceController.java:37:            "persist.bluetooth.disableabsvol";

估计就是cc文件里面做了判断和处理,并且未设置的情况默认为false ,即未开启”停用蓝牙绝对音量功能“。

三、总结

”停用蓝牙绝对音量功能“ 估计大部分开发者无法用到,但是多知道一些内容是不会吃灰的。

”停用蓝牙绝对音量功能“ 具体实现就是控制prop属性 persist.bluetooth.disableabsvol 就可进行开启和关闭。未设置的情况,默认是关闭。

就使用情况来看,似乎是记忆了蓝牙设备的音量大小,具体怎么实现的,不做分析研究。

网上也有对绝对音量和相对音量代码控制的分析(写得比较一般!):
https://blog.csdn.net/cheriyou_/article/details/122681239

你可能感兴趣的:(android,Android系统,android,java,开发语言)