宜春市铭展网络科技有限公司
首页 | 联系方式 | 加入收藏 | 设为首页 | 手机站

产品目录

联系方式

联系人:业务部
电话: 00175-880212
邮箱:service@nanjingqz.com

当前位置:首页 >> 产品展示 >> 默认分类 >> 正文

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)手动取消对此外设的连接.