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