7

Я работаю над сканированием BLE в фоновом режиме.Bluetooth LE Устройство сканирования в фоновом режиме от iOS

Проблема не работает в фоновом режиме. Он работает очень хорошо в режиме Foreground.

Ниже приведено несколько строк кода.

dispatch_queue_t centralQueue = dispatch_queue_create("com.XXXXX.BLEback", DISPATCH_QUEUE_SERIAL);// or however you want to create your dispatch_queue_t 
manager = [[CBCentralManager alloc] initWithDelegate:self queue:centralQueue options:nil]; 

- (void)centralManagerDidUpdateState:(CBCentralManager *)central 
{ 
    if (central.state == CBCentralManagerStatePoweredOn) { 

     [self startScan]; 
    } 

    if (![self supportLEHardware]) 
    { 
     @throw ([NSError errorWithDomain:@"Bluetooth LE not supported" 
            code:999 
           userInfo:nil]); 
    } 
} 

- (void)startScan 
{ 
    NSDictionary * options = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:false] forKey:CBCentralManagerScanOptionAllowDuplicatesKey]; 
    [manager scanForPeripheralsWithServices:nil options:options]; 
} 

здесь я передаю ноль в качестве услуг.

Я принимаю в разделе «Устройства» в Xcode. Но не в приложении.

Notice>: (Error) Discovered unknown type for scan: { 
     kCBAdvDataChannel = 37; 
     kCBAdvDataIsConnectable = 1; 
     kCBAdvDataManufacturerData = <00003962 6708f4c1 00000000 00d02b00 20d03300 20d03300 20>; 
     kCBAdvDataWSaturated = 0; 
     kCBAdvDataWlanRSSI = 0; 
    }, -51, puck type: 57 
+0

Пожалуйста, покажите больше коды - в частности, ваш 'centralManagerDidUpdateState' метода делегата и где вы выполняете' scanForPeripheralsWithServices' в отношении получения механизированного о состоянии в этом методе делегата – Paulw11

+0

@ Paulw11 Обновленного вопрос с строками коды. –

+0

Вы пробовали приложение LightBlue из магазина приложений, чтобы узнать, доступно ли ваше периферийное устройство? – Paulw11

ответ

10

Вы не можете сканировать nil услуг в фоновом режиме. - Вы должны указать услугу (ы), что вы заинтересованы в Из приложения documentation

, которые указали фоновый режим Bluetooth-Сентрал, разрешено для сканирования в фоновом режиме. Тем не менее, они должны явно сканировать одну или несколько служб, указав их в параметре serviceUUIDs .

+0

Я так думаю, но какие нужны службыUUID. Связано ли это с аппаратными службами? https://developer.bluetooth.org/gatt/services/Pages/ServicesHome.aspx –

+0

Вам необходимо идентифицировать службу, которую рекламирует ваше периферийное устройство. LightBlue может помочь с этим, или вы можете использовать свое приложение в режиме переднего плана, чтобы обнаружить сервисы - например, частота сердечных сокращений равна 0x180d – Paulw11

+0

Сканирование приложения LightBlue в фоновом режиме? –

1

Для вашего приложения, чтобы продолжать получать обновления Bluetooth в фоновом режиме, вам нужно добавить UIBackgroundModes записи в свой Info.plist и включает в себя значение bluetooth-central в списке.

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