多个 CBCentralManager 实例?

Posted

技术标签:

【中文标题】多个 CBCentralManager 实例?【英文标题】:Multiple CBCentralManager instances? 【发布时间】:2015-05-18 17:26:08 【问题描述】:

是否支持多个CBCentralManager 实例?如果是,它们是在哪个 ios 版本中开始支持的?

我在 Apple 邮件列表中发现 multiple emails 表明它们不是。但是,这不是通过例外或理论上的+sharedCentralManager 来强制执行的。一个说文档说它们不受支持。不过the documentation中不再提及,目前头文件注释(iOS 8.3 SDK)为:

/*!
 *  @class CBCentralManager
 *
 *  @discussion Entry point to the central role. Commands should only be issued when its state is <code>CBCentralManagerStatePoweredOn</code>.
 *
 */

我不希望 CBPeripheral 实例可以在 CBCentralManager 实例之间移植(这不是这个问题的意义所在),我只希望蓝牙堆栈中有多个“窗口”(没有任何不规则行为)。

【问题讨论】:

最好有一个 CBCentralManager 实例并围绕它设计您的应用程序。为什么需要多个? 我看不出这有多“好”——尤其是因为这本质上是在强制使用单例,我通常认为这是糟糕的设计。要么有效,要么无效。如果它不起作用,那很公平,但这似乎完全没有记录(而且它以前有记录,因此是问题)。 【参考方案1】:

从 iOS 8.3 开始,似乎创建第二个 CBCentralManager 实例将导致第二个实例将其状态报告为 CBCentralManagerStateUnsupported (2)。因此,不支持CBCentralManager 的多个实例。

【讨论】:

我没有观察到相同的行为。我正在运行 8.3 并且有多个管理器,都处于开机状态。 @Kevin Hi,正如你所说,iOS 8.3 支持多个管理器,但它们都可以连接到同一个外围设备吗? 似乎有人从 Apple 支持那里得到了与此相矛盾的答案:***.com/questions/32221338/…

以上是关于多个 CBCentralManager 实例?的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 8.0 CBCentralManager 问题

CBCentralManager 状态总是关闭

使用 CoreBluetooth/CBCentralManager.h 框架

核心蓝牙 CBCentralManager 总是在 ipad2 上报告状态为未知

SQL Server CE:到同一个数据库(C#,WPF)的多个连接(2+ 应用程序)

xamarin ios 应用程序因 CBCentralManager 崩溃