为啥 CBPeripheral 标识符和 UUID 不同?
Posted
技术标签:
【中文标题】为啥 CBPeripheral 标识符和 UUID 不同?【英文标题】:Why CBPeripheral identifier and UUID are different?为什么 CBPeripheral 标识符和 UUID 不同? 【发布时间】:2016-11-14 08:41:25 【问题描述】:我有知道 UUID 的 iBeacon。如果我从 android 设备搜索此信标 - 我可以准确地看到此 UUID。
但是,当我从 ios 设备搜索此 iBeacon 时,无法使用此 UUID 找到它。我发现外围设备的标识符与 UUID 不同。
func centralManagerDidUpdateState(_ central: CBCentralManager)
let serviceUUID: CBUUID = CBUUID(string: "e2c56db5-dffb-48d2-b060-d0f5a71096e0")
central.scanForPeripherals(withServices: [serviceUUID], options: nil)
为什么它们不同?如何搜索具有已知 UUID 的外围设备?
【问题讨论】:
服务 UUID 与设备 UUID 不同。此外,“纯”iBeacon 只能通过 CoreLocation 发现。另一个信息:如果您不与它们配对,BLE 中设备的 UUID 机会(它们是时间戳、读取 UUID 等之间的混合)。 【参考方案1】:我怀疑您在 Android 上“发现”的不是 iBeacon 的 ProximityUUID,而是另一种 UUID(例如 Larme 在他的评论中建议的 GATT 服务。)有许多不同的 UUID 用于不同的蓝牙的东西。您想要的 iBeacons 称为 Proxmity UUID。
您可以尝试使用Locate App. 等专用信标扫描仪查看 Proximity UUID 如果您可以使用此应用看到信标,并且将其识别为 iBeacon,您也应该能够使用 CoreLocation 检测到它iOS 是这样的:
let region = CLBeaconRegion(proximityUUID: UUID(uuidString: "11111111-2222-3333-4444-c0765a17c9ab")!, identifier: "myBeacons")
locationManager.delegate = this
locationManager.startRangingBeacons(in: region)
您不能使用 CoreBluetooth API 来检测 iBeacon,因为 iOS 会阻止使用 CoreBluetooth 来检测 iBeacon。另请注意,在 iOS 上设置信标测距还有几个步骤(请求权限、定义回调方法),因此请查看 here 之类的教程。
【讨论】:
以上是关于为啥 CBPeripheral 标识符和 UUID 不同?的主要内容,如果未能解决你的问题,请参考以下文章
使用java.util.UUID生成唯一标识,为啥生成唯一标识的方法有些还需要参数?