Проверить состояние Bluetooth в iOS

У меня есть приложение (я не собираюсь отправлять это приложение в магазин приложений Apple), с помощью которого я хочу проверить, включен ли Bluetooth. Если он включен, я должен отобразить предупреждение.

    - (void)centralManagerDidUpdateState:(CBCentralManager *)central{
  switch (central.state) {
    case CBCentralManagerStatePoweredOn:{
      //alert view
      break;
    }
  }

А в viewdidload я так и сделал

  CBCentralManager * manager = [[CBCentralManager alloc] initWithDelegate:self queue:nil];

но это не работает в ipad2 с ios 5.1.

проблема в том, что central.state всегда равно нулю.

Я хочу, чтобы тот же сценарий работал от ios 3.0 до ios 6 beta. Есть ли общий код для проверки состояния Bluetooth.

Приветствуется любой возможный код, даже код с приватным API.


person Irshad Mohamed    schedule 29.08.2012    source источник


Ответы (3)


CBCentralManager предназначен для использования Bluetooth Smart (часть Low Energy в Bluetooth 4.0). Это новая технология, недавно представленная на устройствах iOS/OS X. Текущая поддержка есть в iPhone 4s и новом iPad. iPad 2 НЕ поддерживает эту технологию. Также CBCentralManager доступен только с iOS 5 и выше.

Если вы хотите проверить традиционное состояние Bluetooth, вам придется найти другой способ сделать это.

В вашем случае central.state должно быть равно CBCentralManagerStateUnsupported.

person Joris Kluivers    schedule 29.08.2012
comment
Спасибо чувак. ты дал понять. Есть ли у вас какое-либо решение, то есть какой-либо код для определения состояния Bluetooth, который работает для всех устройств и ОС. - person Irshad Mohamed; 29.08.2012
comment
Не то, что я знаю из. Но я работаю только с общедоступными API, так что это не совсем моя область знаний. - person Joris Kluivers; 29.08.2012

Вы хотите взглянуть на BluetoothManager API. BluetoothManager.framework — это частная структура, в которой живет этот API. Вы можете связать ее с вашим проектом Xcode или использовать dlopen, чтобы открыть ее ("/System/Library/PrivateFrameworks/BluetoothManager.framework/BluetoothManager") динамически.

Важные звонки будут

- (BOOL)powered;
- (BOOL)enabled;
- (BOOL)setPowered:(BOOL)arg1;
- (BOOL)setEnabled:(BOOL)arg1;

Чтобы получить экземпляр BluetoothManager, используйте это:

BluetoothManager* mgr = [BluetoothManager sharedInstance];
person Nate    schedule 22.09.2012

Я также не получаю CBCentralManagerStateUnsupported на iPhone 4 под управлением iOS7. Я открыл сообщение об ошибке в Apple.

http://openradar.appspot.com/15564675 — это радар

и https://github.com/deadfalkon/btLeState репозиторий

person volkersfreunde    schedule 02.12.2013
comment
Эта функция поддерживается только на 4S и выше: en.wikipedia.org/wiki/List_of_iOS_devices#Features< /а> - person Asahi; 03.09.2014