了解 CoreBluetooth 扫描和连接流程

时间:2021-05-11 12:11:43

标签: ios core-bluetooth ios-bluetooth cbcentralmanager

我正在尝试使用 CoreBluetooth,但偶然发现了一些我不明白的东西。 在扫描附近的蓝牙设备时,当我记录结果时,我不会退出理解输出,例如 - 找到的一些设备:

discovered peripheral =  <CBPeripheral: 0x281b7c140, identifier = FC3098A3-426F-F1CF-C053-1D62E3EDE473, name = (null), state = disconnected>
discovered peripheral =  <CBPeripheral: 0x281b78000, identifier = 3313CAC4-3D8F-C225-4ABB-73390CCA1DC3, name = SL-1000S_BLE(ATT), state = disconnected>
discovered peripheral =  <CBPeripheral: 0x281b640a0, identifier = D509D6C8-F5C4-E2E5-9387-B6294BCA5396, name = (null), state = disconnected>
discovered peripheral =  <CBPeripheral: 0x281b78140, identifier = A2DC3485-F341-4AAB-6B09-8816FFACA15A, name = (null), state = disconnected>
discovered peripheral =  <CBPeripheral: 0x281b7c280, identifier = 89069574-F6F9-0637-1723-FEB36C3EE2B8, name = (null), state = disconnected>
discovered peripheral =  <CBPeripheral: 0x281b78280, identifier = 792BCEC8-471F-2327-6AD1-33EC57F2A758, name = (null), state = disconnected>
discovered peripheral =  <CBPeripheral: 0x281b783c0, identifier = B7A4C076-D761-5646-0E66-DA832A9061BB, name = Amazfit Band 5, state = disconnected>
discovered peripheral =  <CBPeripheral: 0x281b7c3c0, identifier = 759BD68B-0E48-F0D6-1C08-43F4D2DA528A, name = (null), state = disconnected> 

为什么有些设备有名称,有些设备的名称为 null?

另一件事,我有一部带蓝牙的 Android 手机,但我在结果日志中没有看到它。 我可以看到 Android 设备的唯一方法是,如果我手动转到 iPhone 的蓝牙设置,在扫描结果* 中找到 Android 设备并手动连接到它。手动连接后,我看到以下日志:

discovered peripheral =  <CBPeripheral: 0x281b790e0, identifier = 7E34D617-731F-616E-8C89-5729870CDD5E, name = Edward's Galaxy S9+, state = disconnected>

现在,手动连接后为什么连接状态显示 disconnected,即使我进入设置我看到它说它已连接?

还有一件事,为什么在蓝牙设置中扫描设备时我确实看到了设备,但我的应用程序的扫描结果却没有出现?

这是代码片段:

override func viewDidLoad() {
        super.viewDidLoad()
        
        centralManager = CBCentralManager(delegate: self, queue: nil)
    }

func centralManagerDidUpdateState(_ central: CBCentralManager) {
    
    switch central.state {
        case .poweredOn:
            print("poweredOn")
            self.centralManager?.scanForPeripherals(withServices: nil, options: [CBCentralManagerScanOptionAllowDuplicatesKey:false])
            break
        @unknown default:
            print("default")
            break
    }
}

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {

    if(!peripheralsArray.contains(where: { $0.identifier == peripheral.identifier})) {
        print("discovered peripheral = ", peripheral)
        peripheralsArray.append(peripheral)
    }
 }

0 个答案:

没有答案
相关问题