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.
6 réponses
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.
vous pouvez utiliser
String str = "1234";
UUID uuid = UUID.nameUUIDFromBytes(str.getBytes());
System.out.print(uuid.toString());
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"
.
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
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)