iOS蓝牙开发之连接外设

分阶段了解:

  1. 扫描
  2. 连接
  3. 发现服务和特征,写入或读取数据

连接类

BTConnectionPool

此类是基于CBCentralManager连接外设的方法connect和CBCentralManagerDelegate的代理方法.在调用connect方法之后,系统会通过下面的代理方法自动回调结果,我们可以根据结果来确认中心设备与外围设备连接的状态.

centralManager.connect(peripheral, options: nil)
/// 中心设备与外设已连接上  
func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral)

/// 中心设备连接外设失败
func centralManager(_ central: CBCentralManager, didFailToConnect peripheral: CBPeripheral, error: Error?)

/// 中心设备与外设连接已断开
func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?)

我们需要做的工作是在中心设备依次连接多台外围设备时,可以清楚了解每台外围设备是否连接成功,以及避免同一台外围设备在已经连接后重复连接的情况.首先声明两个数组类型的成员变量,来分别管理多台外设,其中:

  • connectPeripherals管理所有已经连接上的外设,当设备已被中心设备连接,会加入到此数组中,当设备与中心设备断开连接后,再将这台外设从数组中移除掉
  • connectAttempts管理所有等待连接的外设,当设备已被中心设备连接或连接失败,都会将这台外设从数组中移除掉

centralManager在执行connect方法后,它的代理方法是异步执行的,并不会立即返回结果,为避免中心设备连接外设长时间无响应,我们需要创建一个定时器,这样在超时时间过后,如发现连接的代理方法没走,就调用方法centralManager.cancelPeripheralConnection(peripheral)手动取消对此外设的连接.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容