7

Sto lavorando per scansionare BLE in modalità Sfondo.Dispositivo Bluetooth LE scansione in background da iOS

Il problema non funziona in Scansione in background. Funziona molto bene in modalità Primo piano.

Di seguito sono riportate alcune righe di codice.

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

qui sto passando a zero come un servizio.

Ricevo accesso alla sezione Dispositivi in ​​Xcode. Ma non in applicazione.

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

Si prega di mostrare più codice - in particolare il vostro 'metodo delegato centralManagerDidUpdateState' e dove si esegue il' scanForPeripheralsWithServices' in relazione alla ricezione della alimentato dallo stato in quel metodo delegato – Paulw11

+0

@ Paulw11 domanda aggiornato con le linee di codice. –

+0

Hai provato l'app LightBlue dall'app store per vedere se la tua periferica è rilevabile? – Paulw11

risposta

10

Non è possibile eseguire la scansione per i nil servizi in background -. È necessario specificare il servizio (s) che si interessa Dalle documentation

Apps che hanno specificato la modalità di sfondo bluetooth-centrale sono ammessi per eseguire la scansione mentre in background. Detto questo, è necessario che lo esegua una ricerca esplicita di uno o più servizi specificandoli nel parametro 01UserviceUUIDs.

+0

Penso di sì, ma quali sono gli ID del servizio richiesti. Si riferisce ai servizi hardware? https://developer.bluetooth.org/gatt/services/Pages/ServicesHome.aspx –

+0

È necessario identificare il servizio che la periferica sta pubblicizzando. LightBlue può aiutarti con questo o puoi utilizzare la tua app in modalità in primo piano per scoprire i servizi - ad esempio la frequenza cardiaca è 0x180d – Paulw11

+0

La scansione dell'app LightBlue è in background? –

1

Per la vostra applicazione per continuare a ricevere gli aggiornamenti Bluetooth in background, è necessario aggiungere una voce al vostro UIBackgroundModesInfo.plist e comprendono il valore bluetooth-central nella lista.