tutorial things studio scan low example ble android uuid bluetooth-lowenergy

things - Cómo crear UUID desde una cadena en android



bluetooth low energy (6)

En mi aplicación, busco Bluetooth de baja energía para el servicio específico uuid 2415 . Para convertir la cadena 2415 en uuid, estoy usando UUID serviceUUID = UUID.fromString("2415"); pero en esta línea aparece la excepción IllegalArgumentException: UUID no válido 2415.

Por favor, ayúdenme a este respecto, estaría muy agradecido a este respecto. Gracias por adelantado.


La confusión que puede llevar a muchas personas aquí es que puede usar UUID de códigos cortos para hacer referencia a servicios y características de Bluetooth en otras plataformas, por ejemplo en iOS con CBUUID . Sin embargo, en Android debe proporcionar un UUID completo de 128 bits como se especifica en RFC4122 .

La solución (como señaló @Michael) es anteponer tu UUID corto de 16 bits o 32 bits al UUID base del bluetooth . Puede usar estas funciones para hacer esto un poco más fácil.

public static final String baseBluetoothUuidPostfix = "0000-1000-8000-00805F9B34FB"; public static UUID uuidFromShortCode16(String shortCode16) { return UUID.fromString("0000" + shortCode16 + "-" + baseBluetoothUuidPostfix); } public static UUID uuidFromShortCode32(String shortCode32) { return UUID.fromString(shortCode32 + "-" + baseBluetoothUuidPostfix); }

Por ejemplo:

UUID uuid = uuidFromShortCode16("FFF0");

Esto crea un objeto UUID de "0000FFF0-0000-1000-8000-00805F9B34FB" .


La respuesta aceptada fue proporcionada en un comentario de @Michael:

¿Has intentado combinar tu UUID corto con el UUID base Bluetooth? ¿Es "00002415-0000-1000-8000-00805F9B34FB"? (suponiendo que te refieres a 2415 hexadecimal)?

Estoy convirtiendo ese comentario en una respuesta porque me lo perdí la primera vez que leí este hilo.


Tengo la sensación de que su String "2415" podría haberse convertido directamente de una larga, porque, como señalan los demás, "2415" no está cerca de parecerse a un UUID. Si ese es el caso, entonces deberías usar el constructor UUID que toma dos largos:

uuid = new UUID(long mostSignificant, long leastSignificant)

donde puedes recuperar esos valores largos a través de

uuid.getMostSignificantBits() uuid.getLeastSignificantBits()

Entonces, en tu caso, podrías hacer algo como uuid = new UUID(2415,2415)


Usando la clase UUID

Un ejemplo como este:

UUID.randomUUID().toString()


puedes usar

String str = "1234"; UUID uuid = UUID.nameUUIDFromBytes(str.getBytes()); System.out.print(uuid.toString());


Espero que esto ayude
La excepción se debe a un argumento no válido en el método UUID.fromString() .

El método UUID.fromString() espera el tipo de cadena "302a5a70-c085-4946-b702-fc1deb1046af" como argumento y devuelve la instancia de la clase UUID .
Para convertir la mano corta de 16 bits uuid a 128 bits uuid puede usar esta plantilla "0000XXXX-0000-1000-8000-00805F9B34FB" . aquí reemplaza XXXX con tu uuid de 16 bits.

Por ejemplo:
En su caso, utilice UUID de 128 bits como "00002415-0000-1000-8000-00805F9B34FB" .
y para obtener el UUID de la cadena, deberías usar un código como este

UUID uuid = UUID.fromString("00002415-0000-1000-8000-00805F9B34FB");
https://newcircle.com/s/post/1786/2016/01/04/bluetooth-uuids-and-interoperable-advertisements