2014-11-27 13 views
5

Dopo il collegamento ad un dispositivo di BLE che è la pubblicità di un servizio specifico che mi interessa, per scoprire questo servizio, sto chiamando:iOS Nucleo Bluetooth: servizio pubblicizzato non viene scoperto sulla periferica

[self.peripheral discoverServices:@[[self.class serviceUUID]]]; 

Il metodo delegato - (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error viene chiamato senza errori, tuttavia il numero di servizi restituiti per la periferica è 0 e pertanto non vengono rilevate ulteriori caratteristiche. Qualcuno ha qualche idea del perché questo sta accadendo? Grazie in anticipo!

Di seguito è riportato il corpo completo del metodo delegato.

- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error { 
    if (error) { 
     NSLog(@"didDiscoverServices failed: %@", error); 
     return; 
    } 

    NSLog(@"didDiscoverServices succeeded for peripheral: %@.", peripheral.name); 
    NSLog(@"Number of services: %d", peripheral.services.count); 

    for (CBService *s in peripheral.services) { 
     NSLog (@"Discovered service UUID: %@", s.UUID); 
     if ([s.UUID isEqual:[self.class serviceUUID]]) { 
      NSLog(@"Discover characteristics..."); 
      [self.peripheral discoverCharacteristics:@[[self.class controlPointCharacteristicUUID], [self.class packetCharacteristicUUID]] forService:s]; 
     } 
    } 
} 

La console mostra:

2014-11-27 15:54:51.933 k[197:13362] didDiscoverServices succeeded for peripheral: BootK 
2014-11-27 15:54:51.934 k[197:13362] Number of services: 0 
+1

Qual è la tua periferica? Hai provato qualcosa come l'app LightBlue dall'app store per vedere se può scoprire i servizi? Hai provato a cercare 'nil' piuttosto che i servizi specifici per vedere cosa succede? – Paulw11

+0

Funziona con LightBlue. La scansione di 'nil' non ha risolto il problema. Ho provato a utilizzare alcuni dei codici di esempio più recenti forniti da Nordic, invece del vecchio codice di esempio che utilizzava i blocchi di cui sopra, e ora funziona :) Grazie – Gina

risposta

0

L'unica cosa che posso pensare è [self.class serviceUUID] non corrisponde l'UUID del servizio che stai cercando. Quando avvii la scansione, stai filtrando per servizio UUID?

[self.centralManager scanForPeripheralsWithServices:[self.class serviceUUID] options:nil]; 

Se no, che potrebbe spiegare il motivo per cui siete in grado di scoprire e connettersi ad esso, ma non scoprire che un servizio specifico.

Problemi correlati