Desde el SDK es la única forma de obtener RSSI. Es un poco incómodo, ya que no es útil si solo desea monitorear periódicamente la intensidad de la señal de un dispositivo emparejado.
Sin embargo, hay una manera, pero fuera de SDK. Puede usar API nativa (mediante NDK) y funciones de llamada proporcionadas por Bluez API, el marco bluetooth subyacente en Android (y casi cualquier sistema Linux). La función en cuestión es hci_read_rssi()
proporcionada por libbluetooth.so
(parte de la pila Bluez). Para aprender a usarlo, puede echarle un vistazo al Hcidump tool sources (que viene con Bluez). Podría escribir un código de envoltura JNI para su función, para que pueda obtener la potencia de la señal del dispositivo emparejado.
Hay dos inconvenientes del uso de este método:
- Para medir RSSI que primero debe conectar al dispositivo remoto, al menos en el nivel bajo (no se requiere autenticación para esta conexión) y la liberación de la conexión después de llamando al
hci_read_rssi()
. Esto es más lento que simplemente medir el RSSI de las balizas, ya que otros medios de comunicación inalámbrica proporcionan (GSM o WIFI)
- Conexión de bajo nivel a dispositivos remotos con bluetooth requiere en Android superusuario derechos. Así que olvídate de la escritura y la aplicación que se pueden ejecutar en teléfonos no pirateados (generalmente vienen sin acceso de root, y algunos como Motorola Droid/Milestone incluso anulan la garantía si intentas obtenerla).
hay una entrada en el seguimiento de errores en el proyecto Android, que se ocupa de este problema. Si desea suscribirse (y presionar) para el procedimiento sobre este tema, debe marcar https://code.google.com/p/android/issues/detail?can=1&start=0&num=100&q=rssi&colspec=ID%20Type%20Status. % 20Propietario% 20Summary% 20Stars & groupby = & sort = & id = 6707 – Martze