BLE 异步蓝牙低功耗套件

如果您认为继续开发此软件包是值得的,请给仓库点赞。这将帮助我了解哪个软件包值得投入更多精力。

SwiftUI 示例

文档(API)

macOS 11

主要特性

特性 描述
蓝牙授权管理 管理并请求用户的蓝牙授权许可。
蓝牙电源管理 监控和处理蓝牙电源状态变化,以确保功能正常。
状态发布 发布蓝牙管理器的当前状态,包括授权和电源状态。
用户界面集成 与用户界面无缝集成,以提供蓝牙状态和设备的实时更新。
外围设备管理 管理已发现的蓝牙外围设备,包括连接和断开连接。
多平台 支持多平台,确保跨不同设备和操作系统的兼容性。
在 Swift 中使用 Async Stream 利用现代并发 在 Swift 中采用现代并发技术(例如 AsyncStream),以实现高效且响应迅速的蓝牙操作。
扫描可用设备 扫描并发现附近可用的蓝牙设备。
异步获取已发现设备的服务 使用异步方法获取和管理已发现蓝牙设备的服务,确保流畅且非阻塞的操作。

在外围设备上发现特征的典型工作流程

以下代码块展示了使用 CBCentralManager 的工作流程。流程图可视化了管理蓝牙低功耗设备的关键步骤,并为您入门提供理论基础。

macOS 11

Bluetooth LE 管理器实现细节

BluetoothLEManager 充当 CBCentralManager 的包装器,为管理蓝牙低功耗 (BLE) 操作提供简化的接口。此软件包集成了 Apple BLE 设备实现特有的授权和电源状态监控,从而简化了在您的应用程序中处理这些方面。

关键实现细节

  1. 授权和电源状态管理:

    • CBCentralManager 实例化时,如果尚未授予蓝牙授权,它会自动提示用户进行授权。此提示由系统管理,无需额外的代码来请求授权。
    • 如果在 BluetoothLEManager 的生命周期内蓝牙被关闭,管理器将处理此状态更改并相应地更新相关属性(isAuthorizedisPowered 等)。这确保您的应用程序在其整个生命周期内始终了解蓝牙状态。
  2. 处理生命周期中期的蓝牙状态变化:

    • 如果在 BluetoothLEManager 处于活动状态时蓝牙被关闭或访问被拒绝,管理器将处理此更改并向状态属性提供必要的更新。这使您的应用程序能够动态响应蓝牙可用性的变化。
  3. 用户授权处理:

    • 当创建 CBCentralManager 时,如果尚未授予授权,它会提示用户进行授权。如果用户拒绝此请求,BluetoothLEManager 将检测到这一点并相应地更新其 isAuthorized 属性。
    • 如果授权被拒绝,管理器可以通知用户并建议他们在设备设置中启用蓝牙访问。这确保您的应用程序可以引导用户解决授权问题,而无需额外的实现。
  4. 基于订阅者的动态扫描:

    • BluetoothLEManager 基于等待外围设备列表的活动订阅者数量来管理扫描过程。
    • 只有当至少有一个订阅者通过 peripheralsStream 方法连接以获取外围设备列表时,才会开始扫描外围设备。这确保了在需要外围设备数据时扫描处于活动状态。
    • 当订阅者数量降至零时,管理器会停止扫描以节省资源和电池寿命。这实现了设备蓝牙功能的有效利用。
  5. macOS 上授权蓝牙访问和检查可用性的细节:

    • 有关这些方面的详细指导,请访问此处

公共 API

名称 类型 描述 类型/返回类型
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

BLEState 结构体提供有关设备上蓝牙当前状态的信息。此结构体包含三个关键属性,指示蓝牙是否已授权、是否已开启电源以及是否正在积极扫描外围设备。

属性

名称 类型 描述
isAuthorized Bool 指示蓝牙是否已授权(如果已授权,则为 true,否则为 false)。
isPowered Bool 指示蓝牙是否已开启电源(如果已开启电源,则为 true,否则为 false)。
isScanning Bool 指示蓝牙当前是否正在扫描外围设备(如果正在扫描,则为 true,否则为 false)。

IBluetoothLEManager 协议的描述

IBluetoothLEManager 协议定义了管理蓝牙低功耗 (BLE) 操作的基本功能。它包括用于监控蓝牙状态、发现外围设备以及为特定外围设备获取服务的功能和方法。此协议旨在由在 macOS 12.0+、iOS 15.0+、tvOS 15.0+ 和 watchOS 8.0+ 上处理蓝牙通信的类或结构体实现。

iOS macOS
iOS 15 macOS 12

许可证

本项目根据 MIT 许可证获得许可。