2010-01-27 11 views
15

Ho bisogno di conoscere la potenza del segnale di una connessione Bluetooth a un dispositivo remoto che realizzo con il mio telefono Android 2.1. Dall'SDK, posso vedere che posso determinare l'RSSI al momento in cui scopro il dispositivo remoto. Ma non riesco a vedere come aggiornare quel valore RSSI nel tempo.Android 2.1: come si esegue il polling del valore RSSI di una connessione Bluetooth esistente?

Qualcuno può darmi una mano? Grazie!!

+0

c'è una voce nel bug tracker al progetto Android, che risolve questo problema. Se vuoi sottoscrivere (e spingere) per i procedimenti su questo problema, devi inserire https://code.google.com/p/android/issues/detail?can=1&start=0&num=100&q=rssi&colspec=ID%20Type%20Status % 20Owner% 20Summary% 20Stars & groupby = & sort = & id = 6707 – Martze

risposta

16

Da SDK è l'unico modo per ottenere RSSI. È un po 'scomodo, dal momento che non è utile se si desidera monitorare periodicamente la potenza del segnale di un dispositivo associato.

Tuttavia c'è un modo, ma fuori SDK. È possibile utilizzare l'API nativa (tramite NDK) e le funzioni di chiamata fornite da Bluez API, il framework bluetooth sottostante in Android (e quasi tutti i sistemi Linux). La funzione in questione è hci_read_rssi() fornita da libbluetooth.so (parte dello stack Bluez). Per sapere come usarlo, puoi dare un'occhiata a Hcidump tool sources (che viene fornito con Bluez). È possibile scrivere un codice wrapper JNI sulla propria funzione, in modo da ottenere la potenza del segnale del dispositivo accoppiato.

Ci sono due inconvenienti di questo metodo:

  • Per misurare RSSI si deve prima connettersi al dispositivo remoto, almeno a livello basso (non è richiesta l'autenticazione per questa connessione) e rilasciare connessione dopo chiamando hci_read_rssi(). Questo è più lento della semplice misurazione di RSSI dai beacon, come altri mezzi di comunicazione wireless forniscono (GSM o WIFI)
  • Connessione di basso livello a dispositivi bluetooth remoti richiede su superutente Android diritti. Quindi dimentica la scrittura e l'applicazione che possono essere eseguite su telefoni non hackerati (di solito vengono senza accesso alla root, e alcuni come Motorola Droid/Milestone rendono nulla la garanzia se cerchi di ottenerlo).
+3

Nota, questo non funzionerà su 4.2, poiché lo stack è cambiato da bluez a broadcom. –

+0

Non è chiaro che 'hci_read_rssi()' è la funzione giusta per ottenere l'RSSI - in base a questa risposta: http://stackoverflow.com/questions/30025139/bluez-bluetooth-api-and-distance-calibration-precision/ 30043437 # 30043437 – Pierz

1

Purtroppo non per Android 2.1, ma dare un'occhiata a questa API per il livello 18 (Android 4.3), che si potrebbe interrogare:

BluetoothGatt.readRemoteRssi() 

Leggi l'RSSI per un dispositivo remoto connesso.

Vedi Android docs here

+0

Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il link per riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. –

Problemi correlati