iOS经典蓝牙开发教程
简介
本教程旨在帮助刚入行的开发者了解并实现iOS经典蓝牙开发。我们将通过以下步骤逐步介绍整个开发流程,并提供每一步所需的代码示例和注释。让我们开始吧!
开发流程
步骤 | 描述 |
---|---|
步骤 1 | 设置蓝牙权限 |
步骤 2 | 扫描并连接设备 |
步骤 3 | 发现服务与特征 |
步骤 4 | 读写数据 |
步骤 5 | 断开连接 |
步骤 1: 设置蓝牙权限
在开始开发之前,我们需要确保应用程序具有访问蓝牙的权限。在Info.plist文件中添加以下权限:
<key>NSBluetoothPeripheralUsageDescription</key>
<string>Allow the app to connect to Bluetooth devices.</string>
这将显示一个授权弹窗,向用户请求授权访问蓝牙设备。
步骤 2: 扫描并连接设备
首先,我们需要扫描并发现附近的蓝牙设备。使用CBCentralManager类来实现这一步骤:
import CoreBluetooth
class BluetoothManager: NSObject, CBCentralManagerDelegate {
var centralManager: CBCentralManager!
override init() {
super.init()
centralManager = CBCentralManager(delegate: self, queue: nil)
}
func centralManagerDidUpdateState(_ central: CBCentralManager) {
if central.state == .poweredOn {
central.scanForPeripherals(withServices: nil, options: nil)
}
}
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
// 这里可以获取到扫描到的蓝牙设备
}
func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
// 已连接到设备,可以进行数据读写操作
}
}
上述代码创建了一个名为BluetoothManager的类,继承自CBCentralManagerDelegate。通过使用CBCentralManager的实例,我们可以执行扫描和连接设备的操作。
步骤 3: 发现服务与特征
当我们连接到设备后,我们需要发现其提供的服务和特征。使用CBPeripheralDelegate来实现这一步骤:
extension BluetoothManager: CBPeripheralDelegate {
func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
peripheral.delegate = self
peripheral.discoverServices(nil)
}
func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
guard let services = peripheral.services else { return }
for service in services {
peripheral.discoverCharacteristics(nil, for: service)
}
}
func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
guard let characteristics = service.characteristics else { return }
for characteristic in characteristics {
// 在这里可以获取到特征并进行相关操作
}
}
}
上述代码将代理委托到CBPeripheralDelegate,并在连接成功后调用discoverServices方法发现设备提供的服务。在发现服务后,我们可以通过discoverCharacteristics方法发现服务的特征。
步骤 4: 读写数据
现在,我们已经发现了特征,可以进行数据的读写操作了。使用CBPeripheral的readValue和writeValue方法来实现:
extension BluetoothManager: CBPeripheralDelegate {
// ...
func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
// ...
for characteristic in characteristics {
if characteristic.properties.contains(.read) {
peripheral.readValue(for: characteristic)
}
if characteristic.properties.contains(.write) {
peripheral.writeValue(data, for: characteristic, type: .withResponse)
}
}
}
func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
if let value = characteristic.value {
// 读取到的数据
}
}
func peripheral(_ peripheral: CBPeripheral, didWriteValueFor characteristic: CBCharacteristic, error: Error?) {