7

Pracuję nad skanowaniem BLE w trybie Tło.Skanowanie urządzenia Bluetooth LE w tle z iOS

Problem nie działa podczas skanowania w tle. Działa bardzo dobrze w trybie pierwszoplanowym.

Poniżej znajduje się kilka linii kodu.

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]; 
} 

tu jestem przechodzącej nil jako usług.

Otrzymuję log w sekcji Urządzenia w Xcode. Ale nie w zastosowaniu.

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

Proszę pokazać więcej kodu - w szczególności swoją 'centralManagerDidUpdateState' metoda delegata i gdzie wykonać' scanForPeripheralsWithServices' względem otrzymaniu zasilany na stanie w tej metodzie delegata – Paulw11

+0

@ Paulw11 zaktualizowany pytanie z linii kodu. –

+0

Czy wypróbowałeś aplikację LightBlue ze sklepu z aplikacjami, aby sprawdzić, czy Twoje urządzenie peryferyjne jest wykrywalne? – Paulw11

Odpowiedz

10

Nie można skanować za nil usług w tle. - należy podać usługę (y), że jesteś zainteresowany Z Aplikacji documentation

które określonych w tryb Bluetooth centralny tła są dozwolone skanować w tle. To powiedziawszy, muszą one: jawnie skanować jedną lub więcej usług, podając je w parametrze serviceUUIDs .

+0

Myślę, że tak, ale które są wymagane IDUsługi. Czy dotyczy usług sprzętowych? https://developer.bluetooth.org/gatt/services/Pages/ServicesHome.aspx –

+0

Musisz zidentyfikować usługę, którą reklamuje Twoje urządzenie peryferyjne. LightBlue może w tym pomóc lub możesz użyć aplikacji w trybie pierwszoplanowym, aby odkryć usługi - na przykład tętno to 0x180d – Paulw11

+0

Czy aplikacja LightBlue jest skanowana w tle? –

1

Aby aplikacja w dalszym ciągu otrzymywać aktualizacje Bluetooth w tle, należy dodać wpis UIBackgroundModes do Info.plist i obejmują wartość bluetooth-central na liście.

Powiązane problemy