Comment créer UUID à partir de la chaîne de caractères dans android

dans mon application, je scanne Bluetooth basse énergie pour un service spécifique uuid 2415. Pour convertir la chaîne 2415 en uuid j'utilise UUID serviceUUID = UUID.fromString("2415"); mais à cette ligne, il y a exception IllegalArgumentException: UUID 2415 invalide.

s'il vous Plaît aidez-moi à cet égard, je serait très reconnaissant à cet égard. Merci à l'avance.

31
demandé sur user3056760 2013-12-02 13:44:19

6 réponses

utiliser la classe UUID

Un exemple:

 UUID.randomUUID().toString()
39
répondu Alécio Carvalho 2014-06-03 15:49:02

accepté La réponse dans un commentaire de @Michael:

avez-vous essayé de combiner votre UUID court avec la base Bluetooth UUID? C'est-à-dire: "00002415-0000-1000-8000-00805F9B34FB"? (en supposant que vous avez voulu dire 2415 hexadécimal)?

je convertis ce commentaire en réponse parce que je l'ai manqué la première fois que j'ai lu ce fil.

16
répondu Richard Le Mesurier 2014-06-25 12:35:41

vous pouvez utiliser

String str = "1234";
UUID uuid = UUID.nameUUIDFromBytes(str.getBytes());

System.out.print(uuid.toString());
9
répondu Özer Özcan 2016-11-22 08:01:12

la confusion qui peut conduire beaucoup de gens ici est que vous pouvez utiliser des UUIDs de code courts pour référencer les services et les caractéristiques de bluetooth sur d'autres plateformes - par exemple sur iOS avec CBUUUID. Sur Android cependant, vous devez fournir un UUID complet de 128 bits comme spécifié dans RFC4122.

le correctif (comme @Michael l'a souligné) est de préparer votre UUID 16bit ou 32bit à la base bluetooth UUID. Vous pouvez utiliser ces fonctions pour faire c'est un peu plus facile.

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);
}

Par exemple:

UUID uuid = uuidFromShortCode16("FFF0");

cela crée un objet UUID à partir de "0000FFF0-0000-1000-8000-00805F9B34FB".

6
répondu 92tonywills 2016-05-05 15:02:24

Espérons que cela aidera

L'exception est due à un argument invalide UUID.fromString() méthode.



UUID.fromString() méthode attendre "302a5a70-c085-4946-b702-fc1deb1046af" type de chaîne de caractères en argument et qui renvoie instance de UUID classe.

pour convertir UUID 16 bits de la main courte en UUID 128 bits, vous pouvez utiliser ce modèle "0000XXXX-0000-1000-8000-00805F9B34FB". remplacer ici XXXX avec votre uuid 16 bits.



Par exemple:

Dans votre cas utilisez 128 bit UUID sera "00002415-0000-1000-8000-00805F9B34FB".

et pour obtenir de l'UUID de la chaîne, vous devez utiliser le code comme ceci



UUID uuid = UUID.fromString("00002415-0000-1000-8000-00805F9B34FB");

https://newcircle.com/s/post/1786/2016/01/04/bluetooth-uuids-and-interoperable-advertisements

4
répondu Akhilesh Kumar 2017-01-18 12:16:59

j'ai le sentiment que votre chaîne "2415" pourrait avoir été directement convertie d'une longue, parce que, comme les autres le font remarquer, "2415" n'est pas proche de ressembler à un UUID. Si c'est le cas, alors vous devriez utiliser le constructeur UUID qui prend deux longs:

uuid = new UUID(long mostSignificant, long leastSignificant)

où vous pouvez récupérer ces valeurs longues via

uuid.getMostSignificantBits() uuid.getLeastSignificantBits()

Donc dans votre cas, vous pourriez faire quelque chose comme uuid = new UUID(2415,2415)

0
répondu bremen_matt 2016-11-01 14:13:26