当前位置: 首页 > news >正文

Android14 蓝牙设备类型修改

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

文章目录

  • Android14 蓝牙设备类型设置修改设置
    • 一、前言
    • 二、修改蓝牙设备类型
      • 1、蓝牙设备类型和对应的属性
      • 2、Debug设备设置和获取蓝牙设备类型
      • 3、系统源码中设置蓝牙设备类型
      • 4、Java代码中设置蓝牙prop属性可行吗?
    • 三、其他
      • 1、Android13蓝牙prop协议属性相关内容:
      • 2、蓝牙设备属性未分析到的地方
        • (1)源码中读取蓝牙设备属性的处理
        • (2)其他设备扫描到的蓝牙属性值和系统定义的设备属性值的关联过程
      • 3、Android 蓝牙设备类型判断代码介绍
      • 4、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

相关文章:

Android14 蓝牙设备类型修改

Android14 蓝牙设备类型设置修改设置 文章目录 Android14 蓝牙设备类型设置修改设置一、前言二、修改蓝牙设备类型1、蓝牙设备类型和对应的属性2、Debug设备设置和获取蓝牙设备类型3、系统源码中设置蓝牙设备类型4、Java代码中设置蓝牙prop属性可行吗? 三、其他1、A…...

vue3 语法糖<script setup>

在 Vue 3 中&#xff0c;<script setup>是一种新的语法糖&#xff0c;它极大地简化了组件的编写方式。 <script setup> 是在单文件组件 (SFC) 中使用组合式 API 的编译时语法糖。当同时使用 SFC 与组合式 API 时该语法是默认推荐。 基本概念 简洁的语法&#xf…...

微服务设计原则——高性能:异步与并发

文章目录 1.异步1.1 调用异步1.2 流程异步1.3 数据流异步1.4 小结 2.并发2.1 请求并发2.2 冗余请求2.3 小结 参考文献 1.异步 对于处理耗时长的任务&#xff0c;如果采用同步等待的方式&#xff0c;会严重降低系统的吞吐量&#xff0c;可以采用异步化进行解决。 异步&#xf…...

机器学习——决策树,朴素贝叶斯

一.决策树 决策树中的基尼系数&#xff08;Gini Index&#xff09;是用于衡量数据集中不纯度&#xff08;或混杂度&#xff09;的指标。基尼系数的取值范围在0到0.5之间&#xff0c;其中0表示数据完全纯&#xff08;同一类别&#xff09;&#xff0c;0.5表示数据完全混杂。 基…...

C语言基础(十)

编译预处理命令&#xff1a; 预编译命令在C语言中用于在编译前进行一些特定的处理和控制&#xff0c;帮助程序员更灵活地管理源代码和控制编译过程。 C语言常用的预编译命令&#xff1a; #include&#xff1a;用于包含头文件&#xff0c;将另一个文件的内容插入到当前文件中…...

人像比对-人证比对-人脸身份证比对-人脸身份证实名认证-人脸三要素对比-实人认证

人脸身份证实名认证是一种基于生物识别技术的身份验证方式&#xff0c;主要依托证件OCR识别技术、活体检测、人脸比对等技术手段&#xff0c;对用户身份信息真实性进行核验&#xff0c;确保用户为真人且为本人。以下是关于人脸身份证实名认证的详细解析&#xff1a; 一、认证流…...

Android 上下滑隐藏显示状态栏

一、DisplayPolicy类中监听滑动事件&#xff0c;然后发送广播事件 Android12类路径&#xff1a; frameworks/base/services/core/java/com/android/server/wm/DisplayPolicy.javamSystemGestures new SystemGesturesPointerEventListener(mUiContext, mHandler,new SystemGest…...

USBCAN-II/II+使用方法以及qt操作介绍

一.USBCAN-II/II介绍 USBCAN-II/II 是一款常用的 USB-CAN 转换器&#xff0c;广泛应用于汽车电子、工业自动化等领域。以下是使用该设备的一般步骤和方法&#xff1a; 1. 硬件连接 连接设备&#xff1a;将 USBCAN-II/II 的 USB 接口连接到计算机的 USB 端口。 连接 CAN 网络…...

笔记-系统规划与管理师-案例题-2022年-IT服务部署实施

【说明】 某大型企业去年信息化投入大&#xff0c;完成了重点核心业务系统的建设。由于应急相应预案制定得不充分并且未开展演练&#xff0c;出现了系统性故障时&#xff0c;部分关键的应用系统不可用且在12小时内未能完成恢复业务&#xff0c;给企业带来了较大损失。 为加强该…...

Kubernetes 清理资源常用的 Kubernetes 清理命

清理特定状态的 Pod&#xff1a; 清理 Evicted 状态的 Pod&#xff1a; kubectl get pods --all-namespaces -o wide | grep Evicted | awk {print $1,$2} | xargs -L1 kubectl delete pod -n清理 Error 状态的 Pod&#xff1a; kubectl get pods --all-namespaces -o wide | g…...

【数据结构初阶】二叉树--基本概念

hello&#xff01; 目录 一、树 1.1 树的概念和结构 1.2 树的相关术语 1.3 树的表示 1.4 树形结构实际应用场景 二、二叉树 2.1 概念和结构 2.2 特殊的二叉树 2.2.1 满二叉树 2.2.2 完全二叉树 2.3 二叉树的存储结构 2.3.1 顺序结构 2.3.2 链式结构 …...

Pytorch添加自定义算子之(12)-开闭原则设计tensorrt和onnxruntime推理语义分割模型

一、开闭原则 开闭原则是SOLID原则中的一个,指的是尽量使用开放扩展,关闭修改的设计原则。 在C++中如何使用开闭原则导出动态库,可以按照以下步骤进行: 定义抽象基类:定义动态库中的抽象基类,该基类应该封装可扩展的接口。 实现派生类:实现基类的派生类,这些派生类将封…...

第二百零九节 Java格式 - Java数字格式类

Java格式 - Java数字格式类 以下两个类可用于格式化和解析数字: java.text.NumberFormatjava.text.DecimalFormat NumberFormat 类可以格式化一个数字特定地区的预定义格式。 DecimalFormat 类可以格式化数字以特定区域设置的自定义格式。 NumberFormat类的 getXXXInstance…...

LSI-9361阵列卡笔记

背景 要将raid0更改为JBOD直通模式 注意的点是要先将raid模式调整为JBOD之后重启机器&#xff0c;即可 备注&#xff1a;转换过程中硬盘中的数据未丢失。 步骤贴图 refer https://zhiliao.h3c.com/questions/dispcont/123250 https://blog.csdn.net/GreapFruit_J/article/…...

ArcGIS热点分析 (Getis-Ord Gi*)——基于地级市尺度的七普人口普查数据的热点与冷点分析

先了解什么是热点分析 ? 热点分析 (Getis-Ord Gi*) 是一种用于空间数据分析的技术&#xff0c;主要用于识别地理空间数据中值的聚集模式&#xff0c;可以帮助我们理解哪些区域存在高值或低值的聚集&#xff0c;这些聚集通常被称为“热点”或“冷点”&#xff0c;Gi* 统计量为…...

ASIACRYPT 2021

分类文章编号获奖论文1-3后量子密码4-9多方计算10-15物理攻击,泄露和对策16-21理论22-27公钥密码和鉴权密钥交换28-33高级加密和签名34-39对称密钥构建40-46量子安全47-53获奖论文54对称密码分析55-66增强型公钥加密和时间锁难题67-72同态加密和加密搜索73-77NIZK和SNARK78-80…...

C#学习之路day1

目录 一、概念&#xff1a;.net和c# 二、.net发展方向 三、.Net两种交互模式 四、创建项目 五、vs的组成部分 六、我的第一个C#程序 七、多个项目时启动项目的设置 八、注释 九、快捷键 一、概念&#xff1a;.net和c# 1、.net/dotnet :一般指.Net Framework框架&#…...

【安当产品应用案例100集】010-基于国密UKEY的信封加密应用案例

安当有个客户开发了一套C/S架构的软件&#xff0c;Server在云端&#xff0c;Client由不同的用户使用。最初软件设计开发的时候&#xff0c;没有考虑数据安全形势日渐严峻的问题&#xff0c;Server端和Client端直接就建立一个socket连接来进行通信&#xff0c;Server端发出去的数…...

扫码点餐系统小程序功能分析

扫码点餐系统小程序通常具备以下核心功能&#xff1a; 用户界面&#xff1a;提供直观易用的界面&#xff0c;方便用户浏览菜单、选择菜品、查看订单状态等 。菜单展示&#xff1a;展示餐厅的菜单&#xff0c;包括菜品图片、价格、描述等信息 。扫码点餐&#xff1a;用户通过…...

网络安全——基础知识记忆梳理

1. SQL注入攻击 SQL注入攻击是一种常见的网络安全威胁&#xff0c;它利用Web应用程序中对用户输入的数据的不正确处理&#xff0c;攻击者可以在SQL查询中注入恶意代码&#xff0c;从而执行非授权的数据库操作。这种攻击方式可以导致数据泄漏、数据篡改、绕过认证等多种安全问题…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...