在连接之前识别 CBPeripheral 的类型

Posted

技术标签:

【中文标题】在连接之前识别 CBPeripheral 的类型【英文标题】:Identifying the type of CBPeripheral before connecting 【发布时间】:2019-01-29 14:39:03 【问题描述】:

我最近创建了一个应用,它使用 ios 上的 CoreBluetooth 连接到热敏打印机。 一切都很好,除了一件事。 我可以看到超过 20 个蓝牙设备,但只有一个是热敏打印机。 有没有办法让我在连接之前知道这个外围设备是否是热敏打印机,以便我可以显示/隐藏它? 谢谢

【问题讨论】:

检查它宣传的服务? 我之前试过,由于某种原因服务列表为零 它的广告是什么?你能隔离你所定位的外围设备的广告数据吗? 我如何在调用 peripheral.discorverServices() 之前获取列表,因为我尝试过,但确实在委托函数 didDiscoverServices 中得到了响应 【参考方案1】:

你是在倒过来考虑这个问题。您无需获取服务列表,然后再决定是否连接。您可以决定需要哪些服务并扫描这些服务。

当您致电scanForPeripherals(withServices:options:) 时,您几乎总是应该传递您支持的服务列表。如果你传递了nil,那么除非你正在构建一个通用的 BLE 扫描仪,否则你几乎肯定会错误地调用它。

discoverServices(_:) 也是如此。你很少通过nil 那里。您传递了您知道如何处理的服务列表。当您知道已经获取服务时,.services 属性可以方便地使用,但它很少有用。如果你在不必要的时候调用discoverServices(_:),系统会立即给你发送缓存数据。

【讨论】:

就是这样,上周大部分时间我一直在努力正确连接和打印。扫描部分是我的第一个代码插入,因此我完全忘记了我可以为扫描添加参数。非常感谢

以上是关于在连接之前识别 CBPeripheral 的类型的主要内容,如果未能解决你的问题,请参考以下文章

在“CBPeripheral *”类型的对象上找不到属性“uuid”

Swift 无法将 CBPeripheral 类型的值转换为预期的参数类型

如何自动连接 CBPeripheral(带有 iBeacon + 蓝牙芯片的 BLE 设备)并且应用程序未运行

如何知道 CBPeripheral 何时不再可用

是否可以使用 CBPeripheral 通过蓝牙从 iOS 连接到 macOS

如何在 CBPeripheral 设备上编写命令?