在我的应用中,我扫描低功耗蓝牙以获取特定服务uuid 2415
。要将字符串2415转换为uuid,我使用的是UUID serviceUUID = UUID.fromString("2415");
,但在此行出现异常IllegalArgumentException:无效的UUID 2415。
请在这方面帮助我,在这方面我将非常感谢。提前谢谢。
答案 0 :(得分:37)
答案 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)