OGeek|极客世界-中国程序员成长平台

标题: ios - 如何检查是否通过 iOS 外部附件框架启用了蓝牙? [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 14:28
标题: ios - 如何检查是否通过 iOS 外部附件框架启用了蓝牙?

我正在编写一个基于 iOS 的程序,该程序通过外部附件框架与蓝牙设备进行交互。我想在尝试连接之前提前确定是否启用了蓝牙。不幸的是,我在 External Accessory Framework 中没有看到任何内容允许我这样做的文档。

在检查 [EAAccessoryManager][1] 的文档后,我能找到的最接近的方法是检查 [connectedAccessories][1] 列表以查看是否有设备当前已连接。但是,这并不直接表明蓝牙适配器的状态。

有很多关于核心蓝牙和蓝牙 LE 的示例。我正在专门寻找与外部附件框架相关的解决方案。



Best Answer-推荐答案


ExternalAccessory 框架无法做到这一点。您应该使用 CoreBluetooth,它可以为您提供在具有 BLE 硬件的设备上所需的信息,即 2011 年之后发布的所有内容。您使用 ExternalAccessory 与您的设备进行通信这一事实并不能阻止您也出于此目的而使用 CoreBluetooth知道蓝牙是否打开。

对于较旧的设备,无法通过公共(public) API 获取此信息,但如果您不打算在 App Store 上发布您的应用,则可以使用私有(private) BluetoothManager 框架。

要使用 CoreBluetooth 获取信息,您需要实例化一个 CBCentralManager 实例,例如:

centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil options:nil];

然后实现以下委托(delegate)方法来获取相关信息:

- (void)centralManagerDidUpdateStateCBCentralManager *)central {
    BOOL bleAvailable = central.state != CBCentralManagerStateUnsupported;
    if (bleAvailable) {
        BOOL bluetoothTurnedOn = central.state != CBCentralManagerStatePoweredOff;
        // Do something with the info
    }
    else {
        // Out of luck... We won't be able to determine whether BT is on or off
    }
}

关于ios - 如何检查是否通过 iOS 外部附件框架启用了蓝牙?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35437135/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (https://ogeek.cn/) Powered by Discuz! X3.4