2014-08-19 3 views
8

У меня есть приложение iOS, которое подключается к устройству (arduino) с помощью BTLE. Все работает отлично на моем iPad iOS 7. После обновления до iOS 8 CBCentralManager не находит никаких периферийных устройств.iOS8 и BTLE | CBCentralManager не может найти периферийные устройства

- (void)startScanningForSupportedUUIDs 
{ 
    [self.centralManager scanForPeripheralsWithServices:nil options:nil]; 

} 

Я не знаю, в чем проблема.

ответ

15

У меня есть решение, по какой-то причине в iOS 8 есть некоторая задержка после создания экземпляра вашего CBManager. Вам нужно, чтобы начать сканирование, когда CBCentralManager включен, в этом методе:

-(void)centralManagerDidUpdateState:(CBCentralManager *)central{ 
switch (central.state) { 
    case CBCentralManagerStatePoweredOff: 
     NSLog(@"CoreBluetooth BLE hardware is powered off"); 
     break; 
    case CBCentralManagerStatePoweredOn: 
    { 
     NSLog(@"CoreBluetooth BLE hardware is powered on and ready"); 
     NSArray   *uuidArray = [NSArray arrayWithObjects:[CBUUID UUIDWithString:TRANSFER_SERVICE_UUID], nil]; 
     NSDictionary *options = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:CBCentralManagerScanOptionAllowDuplicatesKey]; 
     [centralManager scanForPeripheralsWithServices:uuidArray options:options]; 
    } 
     break; 
    case CBCentralManagerStateResetting: 
     NSLog(@"CoreBluetooth BLE hardware is resetting"); 
     break; 
    case CBCentralManagerStateUnauthorized: 
     NSLog(@"CoreBluetooth BLE state is unauthorized"); 
     break; 
    case CBCentralManagerStateUnknown: 
     NSLog(@"CoreBluetooth BLE state is unknown"); 
     break; 
    case CBCentralManagerStateUnsupported: 
     NSLog(@"CoreBluetooth BLE hardware is unsupported on this platform"); 
     break; 
    default: 
     break; 
} 
0

В IOS 7 вы могли бы уйти, начав BLE сканирование еще до CBCentralManager был готов. IOS 7 используется выплюнуть предупреждение в таких случаях -

CoreBluetooth [API НЕПРАВОМЕРНОЕ] может только принимать команды в то время как в включенном состоянии

С IOS8 - предостережение больше не появляется и сканирование не на самом деле начать. Чтобы преодолеть эту проблему, подождите, пока CBCentral включится - т.е. подождите, пока менеджер CBCentral перейдет в состояние «CBCentralManagerStatePoweredOn», а затем запустит сканирование. Он отлично работает с этим изменением :)

Смежные вопросы