wake-up-neo.net

So erstellen Sie eine UUID aus Zeichenfolge in Android

In meiner App scanne ich energiesparendes Bluetooth für bestimmte Dienste, uzid 2415. Um den String 2415 in uuid zu konvertieren, verwende ich UUID serviceUUID = UUID.fromString("2415");, aber in dieser Zeile tritt eine Ausnahme auf: IllegalArgumentException: Invalid UUID 2415.

Bitte helfen Sie mir in dieser Hinsicht, der ich in dieser Hinsicht sehr dankbar wäre. Danke im Voraus.

36
user3056760

Verwenden der Klasse UUID

Ein Beispiel wie dieses:

 UUID.randomUUID().toString()
40

Die akzeptierte Antwort wurde in einem Kommentar von @Michael gegeben:

Haben Sie versucht, Ihre kurze UUID mit der Bluetooth-Basis-UUID zu kombinieren? Das heißt "00002415-0000-1000-8000-00805F9B34FB" (vorausgesetzt, Sie meinten 2415 hexadezimal)?

Ich konvertiere diesen Kommentar in eine Antwort, weil ich ihn beim ersten Lesen dieses Threads vermisst habe.

18

sie können verwenden 

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

System.out.print(uuid.toString());
10
Özer Özcan

Die Verwirrung, die viele Leute hier führen kann, ist, dass Sie Kurzcode-UUIDs verwenden können, um auf Bluetooth-Dienste und -Eigenschaften auf anderen Plattformen zu verweisen - beispielsweise auf iOS mit CBUUID . Unter Android müssen Sie jedoch eine vollständige UUID mit 128 Bit Länge, wie in RFC4122 angegeben.

Der Fix (wie @Michael darauf hinweist) besteht darin, Ihre 16-Bit- oder 32-Bit-UUID kurz vor der Basis-Bluetooth-UUID zu stellen. Sie können diese Funktionen verwenden, um dies etwas zu erleichtern.

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

Zum Beispiel:

UUID uuid = uuidFromShortCode16("FFF0");

Dadurch wird ein UUID-Objekt aus "0000FFF0-0000-1000-8000-00805F9B34FB" erstellt.

8
92tonywills

Hoffe das wird helfen
Die Ausnahme beruht auf einem ungültigen Argument in der UUID.fromString() -Methode.

Die Methode UUID.fromString() erwartet den String-Typ "302a5a70-c085-4946-b702-fc1deb1046af" Als Argument und gibt die Instanz der Klasse UUID zurück.
Zum Konvertieren von 16-Bit-UUID in 128-Bit-UUID können Sie diese Vorlage verwenden "0000XXXX-0000-1000-8000-00805F9B34FB". Hier ersetzen Sie XXXX durch Ihre 16-Bit-UUID.

Zum Beispiel:
In Ihrem Fall ist die 128-Bit-UUID "00002415-0000-1000-8000-00805F9B34FB".
und um die UUID aus einem String zu erhalten, sollten Sie Code wie diesen verwenden

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

5
Akhilesh Kumar

Ich habe das Gefühl, dass Ihre Zeichenfolge "2415" möglicherweise direkt von einer langen Zeichenfolge konvertiert wurde, da "2415", wie die anderen betonen, nicht annähernd einer UUID ähnelt. Wenn dies der Fall ist, sollten Sie den UUID-Konstruktor verwenden, der zwei lange dauert:

uuid = new UUID(long mostSignificant, long leastSignificant)

wo Sie diese langen Werte über abrufen können

uuid.getMostSignificantBits()uuid.getLeastSignificantBits()

In Ihrem Fall könnten Sie also etwas tun wie uuid = new UUID(2415,2415)

0
bremen_matt