我正在编写一个基于iOS的程序,它通过外部附件框架与蓝牙设备进行交互。我想在尝试连接之前提前确定蓝牙是否已启用。不幸的是,我在External Accessory Framework文档中没有看到任何允许我这样做的内容。
在检查[EAAccessoryManager][1]
的文档后,我能找到的最接近的是检查[connectedAccessories][1]
列表以查看当前是否有任何设备已连接。但是,这并不能直接指示蓝牙适配器的状态。
关于核心蓝牙和蓝牙LE的SO有很多例子。我特意寻找与外部附件框架相关的解决方案。
答案 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
}
}