如何在android中从字符串创建UUID

时间:2013-12-02 09:44:19

标签: android uuid bluetooth-lowenergy

在我的应用中,我扫描低功耗蓝牙以获取特定服务uuid​​ 2415。要将字符串2415转换为uuid,我使用的是UUID serviceUUID = UUID.fromString("2415");,但在此行出现异常IllegalArgumentException:无效的UUID 2415。

请在这方面帮助我,在这方面我将非常感谢。提前谢谢。

6 个答案:

答案 0 :(得分:37)

使用班级UUID

这样的例子:

 UUID.randomUUID().toString()

答案 1 :(得分:18)

@Michael在评论中提供了接受的答案:

  

您是否尝试将短UUID与蓝牙基础UUID结合使用?   即“00002415-0000-1000-8000-00805F9B34FB”? (假设你的意思   2415十六进制)?

我正在将该评论转换为答案,因为我在第一次阅读此帖时错过了它。

答案 2 :(得分:10)

你可以使用

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

System.out.print(uuid.toString());

答案 3 :(得分:8)

这可能导致许多人的困惑在于,您可以使用短代码UUID在其他平台上引用蓝牙服务和特性 - 例如在具有CBUUID的iOS上。 但是,在Android上,您必须提供RFC4122中指定的完整128位长UUID。

修复(正如@Michael指出的那样)是将你的16位或32位短UUID添加到base bluetooth UUID。您可以使用这些功能使这更容易。

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

例如:

UUID uuid = uuidFromShortCode16("FFF0");

这将从"0000FFF0-0000-1000-8000-00805F9B34FB"创建一个UUID对象。

答案 4 :(得分:5)

希望这会有所帮助
例外是由UUID.fromString()方法中的无效参数引起的。

UUID.fromString()方法期望"302a5a70-c085-4946-b702-fc1deb1046af"类型的字符串作为其参数,并返回UUID类的实例。
要将短手16位uuid转换为128位uuid,您可以使用此模板"0000XXXX-0000-1000-8000-00805F9B34FB"。这里用你的16位uuid替换XXXX

例如:
在你的情况下,使用128位UUID将是"00002415-0000-1000-8000-00805F9B34FB"
要从字符串中获取UUID,您应该使用这样的代码

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

答案 5 :(得分:0)

我有一种感觉,你的字符串“2415”可能只是从长时间直接转换,因为,正如其他人指出的那样,“2415”并不接近类似于UUID。如果是这种情况,那么你应该使用带有两个long的UUID构造函数:

uuid = new UUID(long mostSignificant, long leastSignificant)

您可以通过

检索这些长值

uuid.getMostSignificantBits() uuid.getLeastSignificantBits()

因此,在您的情况下,您可能会执行uuid = new UUID(2415,2415)

之类的操作