使用设备Identifier作为CBUUID调用scanForPeripherals无返回值求助
问题核心原因
你完全搞混了蓝牙外设的系统标识符(identifier)和设备的服务UUID这两个概念:
scanForPeripherals(withServices:)方法接收的参数是设备广播的服务UUID数组,只有当外设广播中包含这些UUID时,才会被筛选出来。- 你打印的
identifier = 64107B7B-E8C0-1F13-C665-72BD638C1609是iOS系统给每个蓝牙外设分配的唯一标识,和设备自身提供的BLE服务UUID没有任何关系。
这就是为什么传nil能搜到(扫描所有外设),但传这个identifier当服务UUID搜不到——目标设备根本没在广播里带这个UUID。
解决办法
有两种可行的处理方式:
方式一:通过服务UUID精准扫描
- 先调用
scanForPeripherals(withServices: nil)找到目标外设,接着调用peripheral.discoverServices(nil)获取它实际支持的所有服务UUID。 - 拿到正确的服务UUID后,再用这个UUID调用
scanForPeripherals(withServices: [正确的服务UUID]),就能精准匹配到目标设备。
方式二:扫描后通过identifier匹配
如果只是想锁定这个特定identifier的外设,不需要在扫描阶段过滤,而是在扫描回调里做判断:
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) { let targetID = UUID(uuidString: "64107B7B-E8C0-1F13-C665-72BD638C1609")! if peripheral.identifier == targetID { // 找到目标设备,停止扫描并发起连接 central.stopScan() central.connect(peripheral) } }
内容的提问来源于stack exchange,提问作者Trev347
相关产品推荐
相关产品推荐

