在 iOS 中,蓝牙是基于 4.0 标准的,设备间低功耗通信。
其中 Peripheral 外设相当于 Socket 编程中的 Server 服务端,Central 中心相当于 Client 客户端。
本地中心 -> 远程外设
本地外设 -> 远程中心
使用流程:
建立中心角色 —> 扫描外设(discover)—> 发现外设后连接外(connect) —> 扫描外设中的服务和特征(discover) —> 与外设做数据交互(explore and interact) —> 断开连接(disconnect)。
1. 建立中心角色
上面的 delegate 为 CBCentralManagerDelegate,后续蓝牙相关的回调都会在此。
queue 代表蓝牙在哪个队列里面操作,如果传入 nil 默认为主队列,值得注意的是后续的回调也是在传入的队列中调用的,所以如果传入的是非主线程的队列,在 delegate 中需要操作 UI 时需要手动切换到主线程。
CBCentralManager 对象创建后会回调到 centralManagerDidUpdateState 方法来检测蓝牙可用状态,这时我们可以提醒用户设备是否支持蓝牙,是否打开了蓝牙。
2. 扫描外设
如果 serviceUUIDS 为 nil 则会扫描周围所有的设外设,反之只会扫描 UUID 匹配的外设。
CBCentralManagerScanOptionAllowDuplicatesKey 默认为 false,此次扫描中发现过设备则跳过不回调,我们这