2013-08-19 13 views
5

Quando uso iOS bluetooth, codice come questo:iOS scanForPeripheralsWithServices bluetooth non ha prodotto risultati

static NSString * const kServiceUUID = @"1802"; 
[self.manager scanForPeripheralsWithServices:@[ [CBUUID UUIDWithString:kServiceUUID] ] options:@{CBCentralManagerScanOptionAllowDuplicatesKey : @NO }]; 

perché nessuna risposta? Ho provato i tipi di coppie di parametri nel metodo scanForPeripheralsWithServices Ho controllato questa domanda: How to get list of available Bluetooth devices?

Il dispositivo è iPod touch 5 (jailbroken) con iOS 6. Ho già testare alcuni dispositivi Bluetooth 4.0. Qualcuno può dirmi perché?

+0

E con opzione su SÌ? – Larme

+0

@Larme Inoltre non funziona. Non capisco cosa significhi questa chiave. –

risposta

7

Scansione con servizi nil per verificare se la periferica che si sta cercando pubblicizza effettivamente qualcosa. Quando viene chiamato lo centralManager:didDiscoverPeripheral:advertisementData:RSSI:, controllare i dati dell'annuncio. Semplicemente NSLog() it. Se 0x1802 non è in esso, la periferica non pubblicizza questo servizio e lo scanner non la troverà in questo modo. Per correggere questo, includere il servizio nella configurazione pubblicità:

NSDictionary *advData = 
@{CBAdvertisementDataServiceUUIDsKey:@[[CBUUID UUIDWithString:@"1802"]]}; 
[peripheralManager startAdvertising:advData]; 
+3

Ancora non ha funzionato per me. Ma l'ho capito. Ho avviato la scansione prima dello stato modificato in CBCentralManagerStatePoweredOn. – david72

+0

bel modo di debug è quello di impostare un array vuoto per serviceUUs per vedere tutte le periferiche. –

1

Hai collegato il dispositivo pubblicitario iOS che è in realtà sta pubblicizzando il servizio di avviso immediato (1802) ?? È possibile stampare questo all'interno del callback CBPeripheralManagerDelegate peripheralManagerDidStartAdvertising:. Puoi anche scansionare nil con entrambe le app in primo piano e guardare all'interno dei dati dell'annuncio per verificare. Allo stesso modo, se si tratta di una periferica dedicata, fare lo stesso con il dispositivo che esegue il gestore centrale in primo piano. Se ancora non riesci a vedere la periferica (e non hai accesso al firmware per questa periferica), forse compra il pacchetto Packet Sniffer per vedere tutti i pacchetti di dati passati.

+0

Ho visto occasionalmente dei dispositivi Bluetooth LE (di solito quelli che ho configurato male e ho dimenticato di pubblicizzare un particolare servizio quando pubblicizzo il dispositivo) per essere persi durante la scansione di un particolare servizio. Se non si esegue il servizio e si esegue la scansione, è possibile esaminare tutti i dispositivi restituiti per verificare che il dispositivo venga persino prelevato come pubblicità, quindi vedere quali servizi pubblicizza. –

1

Grazie mille volte, ma devo dire scusa. Poi ho testato il mio codice con un altro dispositivo Bluetooth 4.0 LE. Funziona! Significa che i miei ex dispositivi Bluetooth 4.0 non sono la versione LE. Mi hanno detto una cosa sbagliata! Grazie e scusa per aver perso tempo.

+1

Bello per te. Male per noi, che ha fornito risposte. Immagino che sarebbe giusto da parte tua votare su di noi. Ricorda, non ti costa niente e in realtà, le soluzioni proposte possono aiutare i futuri visitatori di questa domanda. – allprog

+0

@Smeegol che tipo di dispositivo Bluetooth 4.0 LE hai usato, ho provato con il dispositivo Cirago BT8000 LE, ma non lo rileva. Si prega di citare il nome del dongle bluetooth che possiamo usare per ios. Grazie in anticipo! –

Problemi correlati