Ios 如何从swift 4中的蓝牙低能设备获取广告和响应数据?

Ios 如何从swift 4中的蓝牙低能设备获取广告和响应数据?,ios,swift,bluetooth,bluetooth-lowenergy,core-bluetooth,Ios,Swift,Bluetooth,Bluetooth Lowenergy,Core Bluetooth,我的IOS应用程序正在尝试从蓝色设备获取广告和响应数据,而不连接到该设备。广告和响应数据都应该是31字节长,我们也使用了4个字节的头,加上27个字节的数据,总共62个字节。虽然android版本的应用程序可以轻松获取所有这些数据,但我无法在swift中获取这些数据。我在corebluetooth中调用了Advertision,但只收到27字节的响应数据。我找不到响应数据的4个头字节,也找不到广告数据的31个字节 func centralManager(_ central: CBCentralMa

我的IOS应用程序正在尝试从蓝色设备获取广告和响应数据,而不连接到该设备。广告和响应数据都应该是31字节长,我们也使用了4个字节的头,加上27个字节的数据,总共62个字节。虽然android版本的应用程序可以轻松获取所有这些数据,但我无法在swift中获取这些数据。我在corebluetooth中调用了Advertision,但只收到27字节的响应数据。我找不到响应数据的4个头字节,也找不到广告数据的31个字节

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
......
let data2: NSDictionary? = advertisementData[CBAdvertisementDataServiceDataKey] as? NSDictionary
    if data2 != nil {
        let str :Data = (data2!.allValues)[0] as! Data
        bytes = [UInt8](str)
        print("advertisement data: ",bytes)
    }
}

打印广告数据,您将看到iOS正在获取完整的广告数据

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
    print(advertisementData)
    // Add discovered peripheral to the list
    nearbyPeripherals.append(peripheral)
}
您可以按照本指南使用iOS Corebluetooth。

如果您使用的是Swift3+,请不要使用NSDictionary,如果有等效的NSStuff,请避免使用NSStuff。这里应该是[String:Any]。第二点,您的扫描选项是什么,您的设备是否在DidDiscoveryPeripheral中多次出现?因为iOS倾向于一块一块地更新它,所以在第二次出现时,它可能会有更多的信息。当我扫描它时,我确实收到了两个不同的数据。但其中一个甚至没有响应数据,只有kCBAdvDataIsConnectable:1,kCBAdvDataLocalName:XXXX,另一个是kCBAdvDataServiceData:{CBBB=;},kCBAdvDataIsConnectable:1,kCBAdvDataLocalName:XXXX