2012-09-04 13 views
10

Sto lavorando allo sviluppo di un'app per comunicare con una periferica Bluetooth LE. La periferica che sto testando al momento è una di these. La cosa interessante è che, a volte, quando lo scopro, ottengo il suo nome proprio, "SimpleBLEPeripheral", a volte ho appena ottenuto (null). Sembra che non ci sia alcun comando che possa inviare a CBPeripheral per forzare un aggiornamento di lettura sul nome, quindi come posso assicurarmi di ottenere effettivamente il nome pubblicizzato della periferica?Il nome di CBPeripheral è talvolta nullo

risposta

12

Se si ottiene il nome dalla pubblicitàData NSDictionary sarà sempre il nome che si trova nel pacchetto pubblicitario inviato dalla periferica.

Tuttavia, se si legge la proprietà name di un oggetto CBPeripheral, tale nome potrebbe variare. Cerchiamo di fornire il miglior nome che ci conosciamo al momento. Se non siamo ancora connessi alla periferica, forniremo il nome dal pacchetto pubblicitario. Se una connessione alla periferica è stata effettuata in passato, avremo letto il nome GAP. Riteniamo che il nome GAP sia un nome "migliore" di quello contenuto nel pacchetto pubblicitario (a causa dei limiti di dimensione del pacchetto pubblicitario).

+0

Sembra funzionare, ma non so dove è definito il valore 'kCBAdvDataLocalName' in modo che possa includerlo. Quando stampo i dati della pubblicità, questa è la chiave che accompagna il nome, ma non so come recuperarla senza quel valore costante –

+2

Sono stato in grado di individuare la chiave per il nome nel riferimento quadro bluetooth principale. È un const chiamato 'CBAdvertisementDataLocalNameKey'. –

+0

Sei riuscito a leggere peripheral.name in modo coerente? –

3

L'unica cosa che ho trovato che funziona attorno a questo problema è avviare la scansione e interrompere la scansione, e alla fine tutti i dispositivi che mi aspetto di trovare nello spazio fisico appaiono con nomi non nulli e UUID non nulli.

+1

Non riuscivo a farlo funzionare. Dopo che ho interrotto e riavviato la scansione, o addirittura fermato e riavviato la pubblicità, ricevo comunque il nome GATT ("iPad" perché il mio dispositivo è ipad). Solo una volta vedo peripheral.name = nome pubblicizzato. Ma ascolta THIS THIS: se la chiave del nome dei dati degli annunci periferici ha un nome di 28 caratteri, i dati degli annunci centrali sono vuoti, perché è troppo lungo (con UUID), MA il periphal.name del centro ONE TIME mostra il nome di 28 caratteri. Questo ha un potenziale perché potrei impacchettare 28 byte di dati nei dati degli annunci della periferica per risparmiare tempo e batteria invece di scambio di letture extra per ottenere dati. Come posso fare questo? –

Problemi correlati