studio specification serial sdp recibir por dispositivos detectar datos conectar con android bluetooth uuid rfcomm

android - serial - sdp bluetooth specification



Android: ¿Cómo funcionan los UUID bluetooth? (5)

El UUID se usa para identificar información de manera única. Identifica un servicio particular provisto por un dispositivo Bluetooth. El estándar define un BASE_UUID: 00000000-0000-1000-8000-00805F9B34FB básico BASE_UUID: 00000000-0000-1000-8000-00805F9B34FB .

Los dispositivos como los sensores de atención médica pueden proporcionar un servicio, sustituyendo los primeros ocho dígitos con un código predefinido. Por ejemplo, un dispositivo que ofrece una conexión RFCOMM utiliza el here

Por lo tanto, un teléfono Android puede conectarse a un dispositivo y luego usar el Protocolo de descubrimiento de servicio (SDP) para averiguar qué servicios proporciona (UUID).

En muchos casos, no necesita utilizar estos UUID fijos. En el caso de que esté creando una aplicación de chat, por ejemplo, un teléfono Android interactúa con otro teléfono Android que usa la misma aplicación y, por lo tanto, el mismo UUID.

Por lo tanto, puede establecer un UUID arbitrario para su aplicación utilizando, por ejemplo, uno de los muchos generadores de UUID aleatorios en la web ( por ejemplo ).

No entiendo lo que denota UUID bluetooth. ¿Los UUID denotan protocolos (por ejemplo, RFCOMM )? Si es así, ¿por qué los métodos createRfcommSocketToServiceRecord() requieren UUID, cuando especifican rfcomm en sus nombres? ¿Por qué el código de muestra de BluetoothChat tiene un UUID aparentemente arbitrario y codificado?

Mi pregunta surge porque, según esta pregunta , recibo una excepción de puntero nulo cuando los dispositivos que ejecutan 4.0.4 intentan conectarse (a un dispositivo externo que no es de Android) usando la reflexión. Sin embargo, la solución a esa pregunta no funciona para mí. UUID muuid = device.getUuids()[0].getUuid(); plantea una excepción.

Editar : He resuelto ese problema al codificar el UUID para el servicio de puerto serie según esta respuesta (usando UUID.fromString("00001101-0000-1000-8000-00805f9b34fb"); ).

Además, estoy desconcertado por el motivo por el cual necesito proporcionar un UUID para crear un socket rfcomm no seguro usando createInsecureRfcommSocketToServiceRecord(), pero no usando el método de reflexión.

¿Alguien puede arreglarme?


En resumen: UUid se utiliza para identificar aplicaciones de manera única. Cada aplicación tiene un UUid único

Por lo tanto, use el mismo UUid para cada dispositivo


Por lo general, representa algún servicio común (protocolo) que admite el dispositivo bluetooth.

Al crear su propio servidor rfcomm (con listenUsingRfcommWithServiceRecord ), debe especificar su propio UUID para que los clientes que se conectan a él puedan identificarlo; es una de las razones por las que createRfcommSocketToServiceRecord requiere un parámetro UUID.

De lo contrario, algunos servicios comunes tienen el mismo UUID, solo encuentra uno que necesites y úsalo.

Mira here


UUID es similar en noción a los números de puerto en Internet. Sin embargo, la diferencia entre Bluetooth e Internet es que, en Bluetooth, los números de puerto se asignan dinámicamente por el servidor SDP (protocolo de descubrimiento de servicios) durante el tiempo de ejecución, donde a cada UUID se le asigna un número de puerto. Otros dispositivos preguntarán al servidor SDP, que está registrado con un número de puerto reservado, acerca de los servicios disponibles en el dispositivo y responderá con diferentes servicios distinguibles entre sí al registrarse bajo diferentes UUID.


UUID es solo un número. No tiene ningún significado, excepto que crea en el lado del servidor de una aplicación de Android. Luego el cliente se conecta utilizando ese mismo UUID.

Por ejemplo, en el lado del servidor, primero puede ejecutar uuid = UUID.randomUUID () para generar un número aleatorio como fb36491d-7c21-40ef-9f67-a63237b5bbea. Luego guarda eso y luego codifica eso en tu programa de escucha de esta manera:

UUID uuid = UUID.fromString("fb36491d-7c21-40ef-9f67-a63237b5bbea");

Su programa de servidor Android escuchará las solicitudes entrantes con ese UUID de esta manera:

BluetoothServerSocket server = mBluetoothAdapter.listenUsingRfcommWithServiceRecord("anyName", uuid);

BluetoothSocket socket = server.accept ();