Небольшое исследование ответа Сэма , о котором я думал, что поделюсь. Вы можете сделать это без использования частного API, но с несколькими оговорками:
- Это будетработает только на iOS 5.0+
- Он будет работать только на устройствах, которые поддерживают спецификацию bluetooth LE (iPhone 4S +, iPod 5-го поколения, iPad 3-го поколения +)
- Простое распределение классазаставьте ваше приложение запрашивать разрешение на использование стека bluetooth у пользователя (может быть нежелательно), и если они откажутся, единственное, что вы увидите, это CBCentralManagerStateUnauthorized iOS7 + Revision: вышеупомянутый проход теперь можно предотвратитьсм. комментарии ниже, которые указывают на этот ответ , который объясняет, что вы можете установить опцию CoreBluetooth
CBCentralManagerOptionShowPowerAlertKey
на НЕТ, чтобы запретить разрешение. - Получение состояния Bluetooth является асинхронным и непрерывным.Вам потребуется настроить делегата для получения изменений состояния, так как проверка состояния только что выделенного менеджера Bluetooth вернет CBCentralManagerStateUnknown
При этом, похоже, этот метод действительно обеспечивает обновление стека Bluetooth в реальном временисостояние.
После включения инфраструктуры CoreBluetooth
#import <CoreBluetooth/CoreBluetooth.h>
Эти тесты было легко выполнить с помощью:
- (void)detectBluetooth
{
if(!self.bluetoothManager)
{
// Put on main queue so we can call UIAlertView from delegate callbacks.
self.bluetoothManager = [[CBCentralManager alloc] initWithDelegate:self queue:dispatch_get_main_queue()];
}
[self centralManagerDidUpdateState:self.bluetoothManager]; // Show initial state
}
- (void)centralManagerDidUpdateState:(CBCentralManager *)central
{
NSString *stateString = nil;
switch(self.bluetoothManager.state)
{
case CBCentralManagerStateResetting: stateString = @"The connection with the system service was momentarily lost, update imminent."; break;
case CBCentralManagerStateUnsupported: stateString = @"The platform doesn't support Bluetooth Low Energy."; break;
case CBCentralManagerStateUnauthorized: stateString = @"The app is not authorized to use Bluetooth Low Energy."; break;
case CBCentralManagerStatePoweredOff: stateString = @"Bluetooth is currently powered off."; break;
case CBCentralManagerStatePoweredOn: stateString = @"Bluetooth is currently powered on and available to use."; break;
default: stateString = @"State unknown, update imminent."; break;
}
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Bluetooth state"
message:stateString
delegate:nil
cancelButtonTitle:@"ok" otherButtonTitles: nil];
[alert show];
}