No entiendo lo que denota un UUID bluetooth. ¿Los UUID denotan protocolos (por ejemplo, RFCOMM )? Si es así, ¿por qué los createRfcommSocketToServiceRecord()
métodos requieren UUID, cuando especifican rfcomm directamente en sus nombres? ¿Por qué el código de muestra de BluetoothChat tiene un UUID codificado aparentemente arbitrario?
Mi pregunta surge porque, según esta pregunta , obtengo una excepción de puntero nulo cuando los dispositivos que ejecutan 4.0.4 intentan conectarse (a un dispositivo externo que no sea Android) mediante la reflexión. Sin embargo, la solución a esa pregunta no me funciona. UUID muuid = device.getUuids()[0].getUuid();
plantea una excepción.
Editar : resolví ese problema codificando el UUID para el servicio de puerto serie según esta respuesta (usando UUID.fromString("00001101-0000-1000-8000-00805f9b34fb");
).
Me desconcierta aún más por qué 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?
Respuestas:
En Bluetooth, todos los objetos se identifican mediante UUID. Estos incluyen servicios, características y muchas otras cosas. Bluetooth mantiene una base de datos de números asignados para objetos estándar y asigna subrangos para proveedores (que han pagado lo suficiente por una reserva). Puede ver esta lista aquí:
https://www.bluetooth.com/specifications/assigned-numbers/
Si está implementando un servicio estándar (por ejemplo, un puerto serie, teclado, auriculares, etc.), entonces debe usar el UUID estándar de ese servicio, que le permitirá ser interoperable con dispositivos que no desarrolló.
Si está implementando un servicio personalizado, debe generar UUID únicos, para asegurarse de que los dispositivos de terceros incompatibles no intenten usar su servicio pensando que es otra cosa. La forma más fácil es generar aleatorios y luego codificar el resultado en su aplicación (y usar los mismos UUID en los dispositivos que se conectarán a su servicio, por supuesto).
fuente
El UUID se utiliza para información de identificación única. Identifica un servicio particular proporcionado por un dispositivo Bluetooth. El estándar define un básico
BASE_UUID: 00000000-0000-1000-8000-00805F9B34FB
.Los dispositivos como los sensores sanitarios pueden proporcionar un servicio, sustituyendo los primeros ocho dígitos por un código predefinido. Por ejemplo, un dispositivo que ofrece una conexión RFCOMM usa el código corto: 0x0003
Entonces, un teléfono Android puede conectarse a un dispositivo y luego usar el Protocolo de descubrimiento de servicios (SDP) para averiguar qué servicios ofrece (UUID).
En muchos casos, no es necesario 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 ).
fuente
Por lo general, representa algún servicio (protocolo) común 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 quecreateRfcommSocketToServiceRecord
requiere un parámetro UUID.De lo contrario, algunos servicios comunes tienen el mismo UUID, solo busque uno que necesite y utilícelo.
Ver aqui
fuente
UUID
es un identificador universal . RFCOMM es solo una capa en la pila de protocolos de bluetooth y tiene un UUID asociado según la especificación de bluetooth; y es utilizado por el SDP, no estoy completamente seguro para qué; pero siempre puedes leerlo en las especificaciones. Ahora, si está creando un servicio además del protocolo RFCOMM, tendrá que proporcionar un UUID como lo requiere SDP, de lo contrario, su servicio no será descubierto.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, el servidor SDP (protocolo de descubrimiento de servicios) asigna dinámicamente los números de puerto 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, sobre los servicios disponibles en el dispositivo y responderá con diferentes servicios que se distinguen entre sí por estar registrados bajo diferentes UUID.
fuente
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 usando 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 guárdelo y luego codifíquelo en su programa de escucha de esta manera:
UUID uuid = UUID.fromString("fb36491d-7c21-40ef-9f67-a63237b5bbea");
Su programa de servidor de Android escuchará las solicitudes entrantes con ese UUID como este:
BluetoothServerSocket server = mBluetoothAdapter.listenUsingRfcommWithServiceRecord("anyName", uuid);
Toma BluetoothSocket = servidor.accept ();
fuente
En resumen:
UUid
se utiliza para identificar aplicaciones de forma única. Cada aplicación tiene unUUid
Entonces, use lo mismo
UUid
para cada dispositivofuente
UUID son las siglas de Universal Unique Identifier. UUID es un dígito simple de 128 bits que se distribuye de forma única en todo el mundo.
Bluetooth envía datos por aire y todos los dispositivos cercanos pueden recibirlos. Supongamos que a veces tienes que enviar algunos archivos importantes a través de Bluetooth y todos los dispositivos cercanos pueden acceder a ellos dentro del alcance. Entonces, cuando se empareja con los otros dispositivos, simplemente comparten el número UUID y coinciden antes de compartir los archivos. Cuando envía cualquier archivo, su dispositivo cifra ese archivo con el UUID del dispositivo apropiado y lo comparte a través de la red. Ahora todos los dispositivos Bluetooth en el rango pueden acceder al archivo cifrado, pero requerían el número UUID correcto. Por lo tanto, solo los dispositivos UUID correctos tienen acceso para cifrar el archivo y otros rechazarán la causa del UUID incorrecto.
En resumen, puede usar UUID como contraseña secreta para compartir archivos entre dos dispositivos Bluetooth.
fuente