章节连接
iOS Core Bluetooth_1 概述
iOS Core Bluetooth_2 基础知识
iOS Core Bluetooth_3 用作中央设备的常用方法(1/2)[swift实现]
iOS Core Bluetooth_4 用作中央设备的常用方法(2/2)[swift实现]
写在前面
在上一节中主要介绍了CoreBluetooth中中央设备的实例化、扫描与连接。这一节继续介绍,在连接设备后的查询服务与特征字段,读取、写入、订阅等操作。
- 实例化中央管理器对象
- 发现并连接到正在广播的外围设备
- 在连接到外围设备后浏览其数据
- 发送读写请求到外围服务的特征值
- 订阅特征值以在更新时被通知
在本文中找到的代码示例是简单抽象的。您可能需要进行适当的更改以将其合并到您的真实应用中。
1 发现您所连接的外围设备的服务
建立与外围设备的连接后,您可以浏览其数据。与外围设备进行数据交互的第一步是发现其可用的服务。由于外围设备可以广播的数据量受到大小限制,因此您可能会发现外围设备提供的服务多于其广播的内容(在其广播包中)。您可以通过调用(进行连接后的)外围设备的discoverServices:方法来发现外围设备提供的所有服务,如下所示:
peripheral.discoverServices([TransferService.serviceUUID])
注意: 在实际应用中,通常不传入nil参数,因为这样做会返回外围设备上所有可用的服务。由于外围设备可能包含比您所需要的更多的服务,因此发现所有这些外围设备可能会浪费电池寿命并不必要的浪费时间。取而代之的是,通常指定您已经知道有兴趣发现的服务的UUID,如本例中:[TransferService.serviceUUID]
发现指定的服务后,外围设备(CBPeripheral您连接到的对象)将调用peripheral:didDiscoverServices:其代理方法。核心蓝牙创建一个CBService对象数组保存每个在外围设备上发现的服务并遍历指定字段。如下所示,您可以实现此代理方法来访问发现的服务数组(通常通过extension实现):
func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
if let error = error {
os_log("Error discovering services: %s", error.localizedDescription)
cleanup()
return
}
// Discover the characteristic we want...
// Loop through the newly filled peripheral.services array, just in case there's more than one.
guard let peripheralServices = peripheral