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).
fonte
2010-03-02 08:03:02
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