Ответ 1
Использование класса UUID
Пример:
UUID.randomUUID().toString()
В моем приложении я сканирую низкоэнергетический Bluetooth для конкретного сервиса uuid 2415
. Чтобы преобразовать строку 2415 в uuid, я использую UUID serviceUUID = UUID.fromString("2415");
, но в этой строке возникает исключение IllegalArgumentException: Неверный UUID 2415.
Пожалуйста, помогите мне в этом отношении, я бы очень благодарен в этом отношении. Спасибо заранее.
Использование класса UUID
Пример:
UUID.randomUUID().toString()
Принятый ответ был предоставлен в комментарии от @Michael:
Вы пробовали комбинировать свой короткий UUID с базовым UUID Bluetooth? То есть "00002415-0000-1000-8000-00805F9B34FB"? (предполагая, что вы имели в виду 2415 шестнадцатеричных)?
Я преобразовываю этот комментарий в ответ, потому что я пропустил его в первый раз, когда прочитал этот поток.
вы можете использовать
String str = "1234";
UUID uuid = UUID.nameUUIDFromBytes(str.getBytes());
System.out.print(uuid.toString());
Путаница, которая может привести многих людей здесь, заключается в том, что вы можете использовать UUID с коротким кодом для ссылки на службы и характеристики bluetooth на других платформах - например, на iOS с CBUUID. Однако на Android вы должны предоставить полный UUID длиной 128 бит, как указано в RFC4122.
Исправление (как указал @Michael) - добавить 16-битный или 32-разрядный короткий UUID к базовому 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");
Это создает объект UUID из "0000FFF0-0000-1000-8000-00805F9B34FB"
.
Надеюсь, что это поможет
Исключение связано с недопустимым аргументом в методе UUID.fromString()
.
Метод UUID.fromString()
ожидает "302a5a70-c085-4946-b702-fc1deb1046af"
тип строки в качестве аргумента и возвращает экземпляр класса UUID
.
Чтобы преобразовать 16-битную комбинацию с 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
У меня такое ощущение, что ваш String "2415" может быть просто преобразован из длинного, потому что, как указывают другие, "2415" не близок к UUID. Если это так, то вы должны использовать конструктор UUID, который занимает две длинные строки:
uuid = new UUID(long mostSignificant, long leastSignificant)
где вы можете получить эти длинные значения с помощью
uuid.getMostSignificantBits()
uuid.getLeastSignificantBits()
Итак, в вашем случае вы можете сделать что-то вроде uuid = new UUID(2415,2415)
Перейдите на веб-сайт, например this и получите допустимую строку UUID.