You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BLE设备用户自定义名称存储位置及Windows API获取方法咨询

BLE设备用户自定义名称相关问题解答

1. BLE设备的用户自定义名称存储位置

存储位置分两端,没有全局统一的存储节点:

  • 外设端:支持名称自定义的BLE设备,会把用户设置的名称存在自身板载的非易失性存储(Flash/NVS分区)中,掉电不会丢失。设备广播时如果携带标准GAP本地名称字段、或者连接后响应GAP服务的设备名特征读取请求,都是从这个存储区域取值。部分低成本BLE模组没有做自定义名称的持久化逻辑,修改后的名称掉电就会恢复出厂默认值。
  • 主机端(手机/电脑等中心设备):和BLE设备完成配对、或者曾经解析到过设备自定义名称的主设备,会把名称存在系统自身的BLE设备缓存库中,后续就算设备暂时不广播名称字段,主机也会直接读取缓存值展示。

你提到的苹果iOS设备广播自定义名称的逻辑是特殊实现:iOS出于隐私保护,对外广播的标准GAP名称字段只会显示通用设备型号,用户自行修改的设备名称(比如“老王的iPhone”“我的AirPods Pro”)不会放在标准字段里,而是封装在广播包的厂商自定义数据段(字段类型0xFF,苹果厂商ID为0x004C)的专属协议格式中,不属于BLE公开标准字段,没有通用解析规则。

2. 使用Windows API获取BLE设备用户自定义名称的标准方法

Windows平台没有兼容所有系统版本的统一获取方案,官方推荐使用WinRT(Windows Runtime)提供的BLE API,旧版Win32蓝牙接口无法稳定获取自定义名称,尤其无法解析厂商数据段内的非标准名称:

  • 适用于Windows 10 1507及以上版本的标准流程:
    1. 调用Windows.Devices.Bluetooth.Advertisement命名空间下的BluetoothLEAdvertisementWatcher扫描周边BLE广播包
    2. 对于遵循BLE标准的设备,直接访问BluetoothLEDevice类的Name属性即可获取名称:该属性会优先读取系统缓存的用户自定义名称,缓存失效时会自动读取广播包中的标准GAP名称字段;如果需要获取设备存储的完整名称,可以在建立GATT连接后,读取GAP服务(服务UUID 0x1800)下的设备名称特征值(特征UUID 0x2A00),读取完成后系统会自动更新对应缓存。
    3. 如果需要获取苹果设备放在厂商数据段中的自定义名称,需要遍历广播对象的ManufacturerData集合,匹配到厂商ID为0x004C的苹果数据段后,按照苹果公开的广播数据格式解析对应偏移位的名称字段——这部分逻辑没有系统API直接封装返回值,需要自行实现字段解析。
      注意:不要通过直接读取注册表中BLE缓存项的方式获取名称,不同Windows版本的注册表路径、存储加密方式均属于未公开实现,系统版本更新后极易失效。

内容的提问来源于stack exchange,提问作者oregonduckman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 22:16:19