了解 CoreBluetooth 扫描和连接流程

问题描述

我正在尝试使用 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,state = disconnected>
discovered peripheral =  <CBPeripheral: 0x281b78140,identifier = A2DC3485-F341-4AAB-6B09-8816FFACA15A,state = disconnected>
discovered peripheral =  <CBPeripheral: 0x281b7c280,identifier = 89069574-F6F9-0637-1723-FEB36C3EE2B8,state = disconnected>
discovered peripheral =  <CBPeripheral: 0x281b78280,identifier = 792BCEC8-471F-2327-6AD1-33EC57F2A758,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,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)
    }
 }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...