特性 | 描述 |
---|---|
蓝牙授权管理 | 管理并请求用户的蓝牙授权许可。 |
蓝牙电源管理 | 监控和处理蓝牙电源状态变化,以确保功能正常。 |
状态发布 | 发布蓝牙管理器的当前状态,包括授权和电源状态。 |
用户界面集成 | 与用户界面无缝集成,以提供蓝牙状态和设备的实时更新。 |
外围设备管理 | 管理已发现的蓝牙外围设备,包括连接和断开连接。 |
多平台 | 支持多平台,确保跨不同设备和操作系统的兼容性。 |
在 Swift 中使用 Async Stream 利用现代并发 | 在 Swift 中采用现代并发技术(例如 AsyncStream),以实现高效且响应迅速的蓝牙操作。 |
扫描可用设备 | 扫描并发现附近可用的蓝牙设备。 |
异步获取已发现设备的服务 | 使用异步方法获取和管理已发现蓝牙设备的服务,确保流畅且非阻塞的操作。 |
以下代码块展示了使用 CBCentralManager 的工作流程。流程图可视化了管理蓝牙低功耗设备的关键步骤,并为您入门提供理论基础。
BluetoothLEManager
充当 CBCentralManager
的包装器,为管理蓝牙低功耗 (BLE) 操作提供简化的接口。此软件包集成了 Apple BLE 设备实现特有的授权和电源状态监控,从而简化了在您的应用程序中处理这些方面。
授权和电源状态管理:
CBCentralManager
实例化时,如果尚未授予蓝牙授权,它会自动提示用户进行授权。此提示由系统管理,无需额外的代码来请求授权。BluetoothLEManager
的生命周期内蓝牙被关闭,管理器将处理此状态更改并相应地更新相关属性(isAuthorized
、isPowered
等)。这确保您的应用程序在其整个生命周期内始终了解蓝牙状态。处理生命周期中期的蓝牙状态变化:
BluetoothLEManager
处于活动状态时蓝牙被关闭或访问被拒绝,管理器将处理此更改并向状态属性提供必要的更新。这使您的应用程序能够动态响应蓝牙可用性的变化。用户授权处理:
CBCentralManager
时,如果尚未授予授权,它会提示用户进行授权。如果用户拒绝此请求,BluetoothLEManager
将检测到这一点并相应地更新其 isAuthorized
属性。基于订阅者的动态扫描:
BluetoothLEManager
基于等待外围设备列表的活动订阅者数量来管理扫描过程。peripheralsStream
方法连接以获取外围设备列表时,才会开始扫描外围设备。这确保了在需要外围设备数据时扫描处于活动状态。macOS 上授权蓝牙访问和检查可用性的细节:
名称 | 类型 | 描述 | 类型/返回类型 |
---|---|---|---|
bleState |
属性 | 一个发布 BLE 状态更改的主题。 | CurrentValueSubject<BLEState, Never> |
peripheralsStream |
属性 | 提供已发现蓝牙外围设备的异步流。 | AsyncStream<[CBPeripheral]> |
discoverServices |
方法 | 为给定的外围设备获取服务,具有可选的缓存和可选的断开连接。 | async throws -> [CBService] |
connect |
方法 | 连接到特定的外围设备。 🟡 始终使用相同的 BluetoothLEManager 实例来管理外围设备的连接和断开连接,以避免错误并确保行为正确。 | async throws -> Void |
disconnect |
方法 | 断开与特定外围设备的连接。 | async throws -> Void |
Apple 的文档指出,所有 Core Bluetooth 交互都应在主线程上执行,以保持线程安全和蓝牙事件的正确同步。这包括与 CBCentralManager 的交互,例如连接和断开外围设备。虽然回调(例如成功连接或断开连接)可以在不同的线程上接收,但连接或断开连接的初始调用必须在主线程上进行。这是因为 Core Bluetooth 框架不是线程安全的,并且在多个线程上调用这些方法可能会导致竞争条件、崩溃和不可预测的行为。
BLEState
结构体提供有关设备上蓝牙当前状态的信息。此结构体包含三个关键属性,指示蓝牙是否已授权、是否已开启电源以及是否正在积极扫描外围设备。
名称 | 类型 | 描述 |
---|---|---|
isAuthorized |
Bool | 指示蓝牙是否已授权(如果已授权,则为 true ,否则为 false )。 |
isPowered |
Bool | 指示蓝牙是否已开启电源(如果已开启电源,则为 true ,否则为 false )。 |
isScanning |
Bool | 指示蓝牙当前是否正在扫描外围设备(如果正在扫描,则为 true ,否则为 false )。 |
IBluetoothLEManager
协议定义了管理蓝牙低功耗 (BLE) 操作的基本功能。它包括用于监控蓝牙状态、发现外围设备以及为特定外围设备获取服务的功能和方法。此协议旨在由在 macOS 12.0+、iOS 15.0+、tvOS 15.0+ 和 watchOS 8.0+ 上处理蓝牙通信的类或结构体实现。
iOS | macOS |
---|---|
![]() |
![]() |
本项目根据 MIT 许可证获得许可。