如何获取ios swift中可用蓝牙设备的名称列表?

时间:2016-03-10 08:59:34

标签: ios swift bluetooth

此问题是this qustion

的副本

我已在班上宣布CBCentralManagerDelegatevar cb = CBCentralManager()

我将委托设置为cb.delegate = self

我将设备搜索为cb.scanForPeripheralsWithServices(nil, options: nil)

func centralManager(central: CBCentralManager, didDiscoverPeripheral peripheral: CBPeripheral, advertisementData: [String : AnyObject], RSSI: NSNumber) {
    print("\(advertisementData.description)")
}

我可以打印详细信息。但在日志中我得到的数据如下:

["kCBAdvDataTxPowerLevel": 0, "kCBAdvDataLocalName": Smart Key, "kCBAdvDataManufacturerData": <bc00>, "kCBAdvDataServiceData": {
Battery = <64>;
}, "kCBAdvDataIsConnectable": 1]

我想要的只是设备的名称,如:My2Device

2 个答案:

答案 0 :(得分:1)

蓝牙低功耗支持一种协议,如果您之前没有遇到过这种协议,这种协议有点不直观。

这样想:

  • BLE设备称为“外围设备”
  • 每个外围设备都有一个地址(可以在iPhone上更改)有时,但不一定是名称(也可以更改)。
  • 外围设备宣传“服务”
  • 每项服务都有“特征”(读/写)
  • 每个特征都具有您可以阅读或写入的价值

获得可靠“名称”的最佳方法是在一台设备上发布“服务”并在另一台设备上发现该服务。如果您想了解详细信息,您还可以发布特征并阅读名称。

推理:名称不一致,可以更改。但是当你发布一个服务时,很可能你会在另一边发现它......

希望这有帮助

顺便说一句:如果您的应用程序是用例驱动的,并且您不想深入了解网络的细节,请考虑使用可以为您执行此操作的SDK / Framework。

例如:http://p2pkit.io或Google Nearby

免责声明:我为Uepaa工作,为Android和iOS开发p2pkit.io。

答案 1 :(得分:1)

只需打印其名称属性即可。

 print("didDiscoverPerifpheral = \(peripheral.name)")

或者,因为它是可选的:

if let _name = peripheral.name {
        print("didDiscoverPerifpheral = \(peripheral.name!)")
    }