如何通过iOS外部附件框架检查蓝牙是否已启用?

时间:2016-02-16 15:56:40

标签: ios bluetooth external-accessory

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

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

关于核心蓝牙和蓝牙LE的SO有很多例子。我特意寻找与外部附件框架相关的解决方案。

1 个答案:

答案 0 :(得分:1)

对于ExternalAccessory框架,这是不可能的。您应该使用CoreBluetooth,它可以为您提供在具有BLE硬件的设备上所需的信息,即2011年之后发布的所有内容。您使用ExternalAccessory与设备通信这一事实并不妨碍您仅将CoreBluetooth用于此目的知道蓝牙是否已打开。

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

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

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

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

- (void)centralManagerDidUpdateState:(CBCentralManager *)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
    }
}