文章目录
iOS 设备蓝牙名称和广播里的kCBAdvDataLocalName字段不一致的问题
这个问题只在iOS设备上才会出现,设备名称的缓存问题。
android手机上是一致的且与iOS设备上的kCBAdvDataLocalName字段一致,当出现不同时蓝牙调试app搜索的时候显示的是广播里的kCBAdvDataLocalName,但iphone设置里的蓝牙显示的是蓝牙名。
这里是关于蓝牙名称的官方描述
蓝牙设置了修改通道,连接过一次蓝牙后,修改的设备名称会变。
iOS蓝牙广播中可以获取的字段
字段名 | 对应字符串 | 含义 | 广播Type | 描述 |
---|---|---|---|---|
CBAdvertisementDataLocalNameKey | kCBAdvDataLocalName | 对应的值是一个字符串,描述外设的名称 | 0x09 | Complete local name |
CBAdvertisementDataManufacturerDataKey | kCBAdvDataManufacturerData | 对应的值是一个NSData对象,包含外设的产生的数据 | 0xFF | Manufacturer Specific Data: first 2 octets contain the Company Identifier Code followed by the additional manufacturer specific data |
CBAdvertisementDataServiceDataKey | kCBAdvDataServiceData | 包含特定服务的分发数据,该字典的key为代表着该服务的CBUUID对象.值为NSData对象 | 0x06 | Service: More 128-bit UUIDs available |
CBAdvertisementDataServiceUUIDsKey | kCBAdvDataServiceUUIDs | 需要公布的服务的UUID 数组 | 0x07 | Service: Complete list of 128-bit UUIDs |
CBAdvertisementDataOverflowServiceUUIDsKey | kCBAdvDataHashedServiceUUIDs | 代表着在公布数据的"overflow"区域能够被发现的服务的UUID的数组,因为存储在这个UUID 列表是最大努力的 并且不总是精确的.如果设备资源不足这些属性可能不会被公布. | 0x15 | Service Solicitation: list of 128-bit Service UUIDs |
CBAdvertisementDataTxPowerLevelKey | kCBAdvDataTxPowerLevel | 一个包含外设发射功率NSNumber的数字,如果外设在广播的数据包中,提供了他的Tx 功率级别时候,这个属性是可用的. 使用这个RSSI 值和电台功率,计算出路径损耗是有可能. | 0x0A | TX Power Level: -127 to +127 dBm |
CBAdvertisementDataIsConnectable | kCBAdvDataIsConnectable | 一个布尔值,标示公布事件类型是否为可连接的,对应这个Key是一个 NSNumber对象,你可用使用这个值来检查一个外设当前是否为连接状态 | ||
CBAdvertisementDataSolicitedServiceUUIDsKey | kCBAdvDataSolicitedServiceUUIDs | 一个代表着一个或多个服务的UUID |
The connection has timed out unexpectedly
看苹果官网上的苹果硬件参数文档
把这个给硬件工程师看,他们的代码里有 max interval 和min interval 的设置,他们修改后重新给你烧个固件就可以了, 另外如果设备间通信过于频繁,也做一些容错处理。