【问题标题】:How to check if Bluetooth is enabled via iOS External Accessory Framework?如何检查是否通过 iOS 外部附件框架启用了蓝牙?
【发布时间】:2016-05-28 00:03:16
【问题描述】:
我正在编写一个基于 iOS 的程序,该程序通过外部附件框架与蓝牙设备进行交互。我想在尝试连接之前提前确定是否启用了蓝牙。不幸的是,我在External Accessory Framework 文档中没有看到任何允许我这样做的内容。
检查[EAAccessoryManager][1] 的文档后,我能找到的最接近的方法是检查[connectedAccessories][1] 列表以查看当前是否连接了任何设备。但是,这并不直接表明蓝牙适配器的状态。
有很多关于核心蓝牙和蓝牙 LE 的示例。我正在专门寻找与外部附件框架相关的解决方案。
【问题讨论】:
标签:
ios
bluetooth
external-accessory
【解决方案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
}
}