在我的应用程序中,我扫描低功耗蓝牙的特定服务uuid 2415
.要将字符串2415转换为uuid我正在使用UUID serviceUUID = UUID.fromString("2415");
但在此行出现异常IllegalArgumentException:无效的UUID 2415.
请在这方面帮助我,在这方面我将非常感谢.提前致谢.
可能导致许多人在这里的混乱是你可以使用短代码UUID来引用其他平台上的蓝牙服务和特性 - 例如在带有CBUUID的 iOS上.但是,在Android上,您必须提供RFC4122中指定的完整的128位长度UUID .
修复(正如@Michael指出的那样)是将16位或32位短UUID添加到基本蓝牙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");
这将创建一个UUID对象"0000FFF0-0000-1000-8000-00805F9B34FB"
.
@Michael在评论中提供了接受的答案:
您是否尝试将短UUID与蓝牙基础UUID结合使用?即"00002415-0000-1000-8000-00805F9B34FB"?(假设你的意思是2415十六进制)?
我正在将该评论转换为答案,因为我在第一次阅读这个帖子时错过了它.
您可以使用
String str = "1234"; UUID uuid = UUID.nameUUIDFromBytes(str.getBytes()); System.out.print(uuid.toString());
希望这会有所帮助
异常是由于UUID.fromString()
方法中的参数无效.
该UUID.fromString()
方法期望"302a5a70-c085-4946-b702-fc1deb1046af"
字符串的类型作为其参数并返回UUID
类的实例.
要将短手16位uuid转换为128位uuid,您可以使用此模板"0000XXXX-0000-1000-8000-00805F9B34FB"
.这里XXXX
用你的16位uuid 替换.
例如:
在您的情况下使用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
使用类UUID
像这样的例子:
UUID.randomUUID().toString()