2010-01-27 20 views
15

Necesito saber la potencia de la señal de una conexión Bluetooth a un dispositivo remoto que hago con mi teléfono Android 2.1. Desde el SDK, puedo ver que puedo determinar el RSSI en el momento en que descubro el dispositivo remoto. Pero no veo cómo actualizar ese valor de RSSI a lo largo del tiempo.Android 2.1: ¿Cómo puedo sondear el valor RSSI de una conexión Bluetooth existente?

¿Alguien me puede ayudar? ¡¡Gracias!!

+0

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

Respuesta

16

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).
+3

Tenga en cuenta que esto no funcionará en 4.2, ya que la pila ha cambiado de bluez a broadcom. –

+0

No está claro que 'hci_read_rssi()' sea la función correcta para obtener el RSSI, según esta respuesta: http://stackoverflow.com/questions/30025139/bluez-bluetooth-api-and-distance-calibration-precision/ 30043437 # 30043437 – Pierz

1

Por desgracia no es para Android 2.1, pero echar un vistazo a esta API para el nivel 18 (Android 4.3), que se podría sondear:

BluetoothGatt.readRemoteRssi() 

Leer el RSSI para un dispositivo remoto conectado.

Ver Android docs here

+0

Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. –

Cuestiones relacionadas