Как проверить, включен ли Bluetooth через iOS External Accessory Framework?

Я пишу программу для iOS, которая взаимодействует с устройством Bluetooth через External Accessory Framework. Я хотел бы заранее определить, включен ли Bluetooth, прежде чем пытаться подключиться. К сожалению, я ничего не вижу в External Документация Accessory Framework, которая позволяет мне это делать.

После проверки документации для [EAAccessoryManager][1], самое близкое, что я могу найти, - это проверить список [connectedAccessories][1], чтобы узнать, подключены ли какие-либо устройства в настоящее время. Однако это не указывает напрямую на статус адаптера Bluetooth.

Существует множество примеров SO, относящихся к Core Bluetooth и Bluetooth LE. Я специально ищу решение, связанное с External Accessory Framework.


person gonzobrains    schedule 16.02.2016    source источник


Ответы (1)


Это невозможно с фреймворком ExternalAccessory. Вам следует использовать CoreBluetooth, который может предоставить вам необходимую информацию об устройствах с оборудованием BLE, то есть обо всем, выпущенном после 2011 года. Тот факт, что вы используете ExternalAccessory для связи с вашим устройством, не мешает вам также использовать CoreBluetooth только для этой цели. знать, включен ли Bluetooth.

Для более старых устройств нет возможности получить эту информацию с помощью общедоступных 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
    }
}
person Samuel Peter    schedule 25.05.2016