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?) {