Android 蓝牙配对信息 link key存储路径和修改蓝牙默认名称

本文档深入解析Android蓝牙的配对流程,包括A2DP、AVRCP、HFP、OPP和BLE的连接源码分析。重点讨论了链路密钥LinkKey的生成与存储位置(/data/misc/bluedroid/bt_config.conf),以及如何修改蓝牙设备的默认名称。系统会优先读取BTM_DEF_LOCAL_NAME,若为空则使用设备型号作为蓝牙名。

1.Android 蓝牙配对信息 link key存储路径

android-蓝牙A2dp-avrcp-hfp-opp-配对流程-ble-rfcomm源码流程
Android 蓝牙配对连接源码分析文档大全 - 点击下载

蓝牙配对是整个蓝牙连接过程中必不可少的环节,配对的目的是通过各种方法创建共享的 链路密钥(Link Key),该密钥用于设备间连接时认证鉴权并加密相互交互的数据,使得蓝牙技术更具有安全行。密钥不但可以用于当前的连接中,还可以用于两个设备后续的重连过程中,但是鉴权过程中如果比较双方的Link Key不一致,则必须重新开始配对流程,从而创建新的链路密钥(Link Key)用于新的连接交互流程。

链路密钥(Link Key)通过HCI命令HCI_Link_Key_Notification上报协议栈Host并保存,存储路径:/data/misc/bluedroid/bt_config.conf (具体文件路径根据手机类型动态调整)

存储内容如下图:

2.修改蓝牙默认名称

安卓系统会首先读取BTM_DEF_LOCAL_NAME的值,如果为空,就使用"ro.product.model"作为蓝牙设备名。

system/bt/btif/src/btif_dm.cc

#define PROPERTY_PRODUCT_MODEL "ro.product.model"

......

static char* btif_get_default_local_name() {

if (btif_default_local_name[0] == '\0') {

int max_len = sizeof(btif_default_local_name) - 1;

if (BTM_DEF_LOCAL_NAME[0] != '\0') {

strncpy(btif_default_local_name, BTM_DEF_LOCAL_NAME, max_len);

} else {

char prop_model[PROPERTY_VALUE_MAX];

osi_property_get(PROPERTY_PRODUCT_MODEL, prop_model, "");

strncpy(btif_default_local_name, prop_model, max_len);

}

btif_default_local_name[max_len] = '\0';

}

return btif_default_local_name;

}

device/qcom/common/bdroid_buildcfg.h

#define BTM_DEF_LOCAL_NAME "QCOM-BTD"

### CC2340R5 设备上的蓝牙配对保存方法 #### 配对过程概述 在基于信驰达 CC2340 系列模块的设备上实现蓝牙配对,通常需要通过主机 MCU 或者模块自带的功能来完成。具体来说,在单主模式或主从一体模式下,可以通过配置模块参数以及利用其内置固件功能来管理蓝牙配对流程[^2]。 当使用 Linux 平台下的 `bluetoothctl` 工具时,可以按照如下方式操作: 1. 启动扫描以发现目标设备: 输入命令 `scan on` 开始搜索附近的蓝牙设备。 2. 停止扫描并记录目标设备地址: 找到目标设备后,输入 `scan off` 来终止扫描,并记下该设备的 MAC 地址。 3. 发起配对请求: 使用命令 `pair [MAC Address]` 对指定的目标设备发起配对请求。 4. 连接至已配对设备: 成功配对之后,可通过命令 `connect [MAC Address]` 实现连接。 对于 CC2340R5 模块而言,如果采用的是串口透传方案,则可能还需要额外设置 AT 指令集中的某些选项以便于控制蓝牙行为存储配对信息[^2]。 #### 保存配对信息的方法 为了使每次开机都能自动恢复之前的配对状态而无需重新手动执行整个过程,需确保以下几点得以满足: - **内部闪存支持**:确认所使用的硬件版本具备足够的非易失性存储空间用于持久化保存绑定关系数据; - **固件特性启用**:检查当前运行的固件是否已经激活了相应的记忆机制——即允许将成功建立过的链接关系写入EEPROM或其他形式的永久储存介质之中; - **特定指令调用**:依据实际应用环境的不同(比如嵌入式系统还是PC端),可能会涉及到发送专门设计好的API函数或者AT命令给芯片本身去触发这一动作。 例如,在一些情况下,您也许会遇到类似于这样的代码片段用来处理这类需求: ```c #include <ti/devices/DeviceFamily.h> // ... other necessary includes ... void saveBondingInfo(void){ uint8_t status; // Assuming the device has already been paired. status = GAP_BondMgr_SetParameter(GAPBOND_AUTO_SAVE_BONDS, sizeof(uint8_t), &true); } ``` 此C语言示例展示了怎样借助TI SDK里的GAP Bond Manager API接口告诉CC23XX系列器件开启自动化保存键合资料的功能[^3]。 另外值得注意的一点是,尽管上述讨论主要围绕着软件层面展开论述,但从物理层面上看,任何有关更改默认出厂设定的操作都应当谨慎行事以免造成不可逆损害甚至违反相关法律法规的要求。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值