Android14 蓝牙设备类型修改

Android14 蓝牙设备类型设置修改设置

文章目录

一、前言

Android 蓝牙设备类型有啥用?就是显示蓝牙类型作用。

Android设备打开蓝牙后,其他手机可以搜到该蓝牙设备,一般显示为电话或者平板。

但是很多源码编译出来的系统默认是显示耳机类型,那么如何修改呢?

如果是Android11 或者更旧的版本可以参考:

https://blog.csdn.net/xiao5678yun/article/details/80738147

https://blog.csdn.net/zmk0810612124/article/details/82222415

https://blog.csdn.net/weixin_39008937/article/details/134850641

大致修改:

复制代码
XXX.h //不同的方案具体目录不同,一般在device或者system
#define BTA_DM_COD {0x5A, 0x02, 0x0C}        // 手机端搜索到的蓝牙显示手机图标

#define BTA_DM_COD {0x5A, 0x04, 0x06}        // 手机端搜索到的蓝牙显示带耳麦的耳机图标

#define BTA_DM_COD {0x5A, 0x04, 0x18}        // 手机端搜索到的蓝牙显示不带耳麦的耳机图标

Android14 版本也能搜到到定义 BTA_DM_COD 的地方,但是修改了没有作用。

那么Android14 修改蓝牙设备类型,需要如何修改呢?

其实Android13开始,蓝牙的协议就设置成prop属性定义了,所以蓝牙的设备类型也是一个prop属性了。

验证通过prop属性修改蓝牙类型是OK的,并且蓝牙类型的prop属性可以串口修改,关开一次蓝牙就能生效。

目前关于Android13以上的蓝牙设备类型修改的文章暂时还没有,有兴趣的可以查看或者收藏。

二、修改蓝牙设备类型

1、蓝牙设备类型和对应的属性

复制代码
bluetooth.device.class_of_device=26,1,10 //平板/电脑
bluetooth.device.class_of_device=40,4,60 //耳机/音箱
bluetooth.device.class_of_device=90,2,12 /电话/手机类型
bluetooth.device.class_of_device=1,2,3 //随便设置一个,显示为电话类型

2、Debug设备设置和获取蓝牙设备类型

复制代码
//设置蓝牙设备类型,平板
setprop bluetooth.device.class_of_device=26,1,10

//查看蓝牙设备类型
getprop bluetooth.device.class_of_device

3、系统源码中设置蓝牙设备类型

既然是prop属性,那么写在某个mk里面就可以了吧,

但是不同的芯片系统方案,写法可能会有不同,

比如9679 方案,有devices目录下有个bluetooth.prop文件专门用来定义蓝牙相关prop属性的。

device/mediatek/mt5879/configs/bluetooth.prop

复制代码
bluetooth.device.class_of_device=40,4,60 //默认居然是耳机!
bluetooth.device.class_of_device=26,1,10
bluetooth.profile.a2dp.source.enabled?=true
bluetooth.profile.avrcp.target.enabled?=true
bluetooth.profile.bas.client.enabled?=true
...

比如3588方案,并没有个 bluetooth.prop文件,都是用mk文件定义的prop属性。

device/rockchip/common/modules/bluetooth.mk

复制代码
# Set supported Bluetooth profiles to enabled
PRODUCT_PRODUCT_PROPERTIES += \ //普通属性也可以这样设置默认值
	bluetooth.device.class_of_device?=26,1,10 \ //这个属性原本没有,是我加的!
	bluetooth.profile.asha.central.enabled?=true \
	bluetooth.profile.a2dp.source.enabled?=true \
	bluetooth.profile.avrcp.target.enabled?=true \
	bluetooth.profile.bas.client.enabled?=true \
	bluetooth.profile.gatt.enabled?=true \
	bluetooth.profile.hfp.ag.enabled?=true \
	bluetooth.profile.hid.device.enabled?=true \
	bluetooth.profile.hid.host.enabled?=true \
	bluetooth.profile.map.server.enabled?=true \
	bluetooth.profile.opp.enabled?=true \
	bluetooth.profile.pan.nap.enabled?=true \
	bluetooth.profile.pan.panu.enabled?=true \
	bluetooth.profile.pbap.server.enabled?=true \
	bluetooth.profile.sap.server.enabled?=true
...

大致的修改就上面两种情况,

一种是修改在某个prop文件,另外一种修改在mk文件。

但是也排除有其他文件定义的情况,可以在关键目录先搜索看看:

复制代码
grep -nr bluetooth.device.class_of_device
grep -nr bluetooth.profile.a2dp.source.enabled

class_of_device 属性设备,不一定会定义,但是 a2dp.source 源码中肯定会定义的。

4、Java代码中设置蓝牙prop属性可行吗?

Java设置prop代码

复制代码
SystemProperties.set("bluetooth.device.class_of_device", "40,4,60");

最好不要这样做。

因为的有在9679和3588 方案的开机广播和系统服务启动后设置该属性,查看打印是有报错提示的。

并且再次重启有概率系统无法起来,进入Recovery模式。

所以这个估计是不可行的。

就像Android13 之后的代码,无法执行需要系统权限的adb shell命令那样。

估计和系统权限限制有关。

三、其他

1、Android13蓝牙prop协议属性相关内容:

如果是做蓝牙相关研究,蓝牙prop属性是必须要掌握的;

这个是Android13 新出的,很多蓝牙之前设置的属性就不管用了。

https://blog.csdn.net/wenzhi20102321/article/details/139703045

2、蓝牙设备属性未分析到的地方

(1)源码中读取蓝牙设备属性的处理

系统代码中哪里处理属性 bluetooth.device.class_of_device ?

在源码中大致有两个地方有读取这个属性:

复制代码
package\modules\Bluetooth\system\btif\src\btif_dm.cc
package\modules\Bluetooth\system\gd\sysprops\sysprops_module.cc

但是未看到读取属性后的具体判断和处理!

也可能是c代码不熟悉,看不懂具体处理过程。

(2)其他设备扫描到的蓝牙属性值和系统定义的设备属性值的关联过程

Java 代码中耳机类型的值的定义:

复制代码
//蓝牙耳机
action = android.bluetooth.device.action.BOND_STATE_CHANGED//其他广播也打印,这边不一一写
device = 0D:3F:91:E2:FF:D3
getAlias = Y-12
type = 1
getDeviceClassType = 1028 // -->0x404
getMajorDeviceClassType = 1024  // -->0x400

Java上定义的值在不同版本上目前是没有修改的,

这个和上面定义的prop值或者更早的BTA_DM_COD 的定义都是不同的,

难道和Android按钮键值一样,有一套映射文件和流程?

有兴趣的可以自己研究看看。

3、Android 蓝牙设备类型判断代码介绍

使用Java代码如何获取和区分蓝牙设备类型

https://blog.csdn.net/wenzhi20102321/article/details/133777224

4、Android14 大屏开机后蓝牙可搜索但无法连接分析解决

Android14 上可能会有的问题:

https://blog.csdn.net/wenzhi20102321/article/details/141069481

相关推荐
阿巴斯甜18 小时前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker18 小时前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq952719 小时前
Andorid Google 登录接入文档
android
黄林晴21 小时前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab1 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿1 天前
Android MediaPlayer 笔记
android
Jony_2 天前
Android 启动优化方案
android
阿巴斯甜2 天前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android
张小潇2 天前
AOSP15 Input专题InputReader源码分析
android
_小马快跑_2 天前
Kotlin | 协程调度器选择:何时用CoroutineScope配置,何时用launch指定?
android