7

Ich arbeite daran, BLE im Hintergrundmodus zu scannen.Bluetooth LE Gerätescan im Hintergrund von iOS

Problem funktioniert nicht im Hintergrundscan. Es funktioniert sehr gut im Vordergrundmodus.

Unten sind einige Codezeilen.

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

bin hier vorbei i nil als Dienstleistungen.

Ich erhalte in Xcode Geräte Abschnitt anmelden. Aber nicht in der Anwendung.

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

Bitte mehr Code zeigen - in diesem Delegatmethode – Paulw11

+0

@ Paulw11 Aktualisiert Frage mit Codezeilen insbesondere Ihre 'centralManagerDidUpdateState' Delegatmethode und wo Sie führen die' scanForPeripheralsWithServices' in Bezug auf Zustand der Stromversorgung zu erhalten. –

+0

Haben Sie die LightBlue App im App Store ausprobiert, um festzustellen, ob Ihr Peripheriegerät erkennbar ist? – Paulw11

Antwort

10

Sie können nicht für nil Dienste im Hintergrund scannen -. Sie den Dienst angeben müssen (en), die Sie interessieren Aus den documentation

Apps, die die Bluetooth-zentralen Hintergrundmodus angegeben haben, sind erlaubt im Hintergrund scannen. Sie müssen jedoch explizit nach einem oder mehreren Diensten suchen, indem Sie sie im Parameter serviceUUIDs angeben.

+0

Ich denke schon, aber welche serviceUUIDs benötigt. Handelt es sich um Hardware-Dienste? https://developer.bluetooth.org/gatt/services/Pages/ServicesHome.aspx –

+0

Sie müssen den Dienst identifizieren, für den Ihre Peripheriegeräte werben. LightBlue kann dabei helfen, oder Sie können Ihre App im Vordergrundmodus verwenden, um die Dienste zu entdecken - zum Beispiel ist die Herzfrequenz 0x180d – Paulw11

+0

Wird die LightBlue App im Hintergrund gescannt? –

1

Für Ihre App Bluetooth-Updates im Hintergrund zu erhalten, die Fähigkeit, müssen Sie den Wert bluetooth-central in der Liste einen UIBackgroundModes Eintrag zu Ihrem Info.plist und umfassen hinzuzufügen.

Verwandte Themen