我有一个充当服务器的android设备,该设备连接到多个蓝牙android客户端。 我了解UUID的概念及其独特性。
我的问题是,我可以对连接到服务器的所有客户端使用相同的UUID吗? 如果没有,我该如何以编程方式为客户端生成UUID,并让服务器知道其UUID。
在Android 8.1之后,问题开始出现,您再也无法访问我最初用来为客户端android设备生成UUID的蓝牙MAC地址。
答案 0 :(得分:1)
您可以生成这样的一个。 首先,需要生成尽可能长的64位最低和最高有效位:
private static long get64LeastSignificantBitsForVersion1() {
Random random = new Random();
long random63BitLong = random.nextLong() & 0x3FFFFFFFFFFFFFFFL;
long variant3BitFlag = 0x8000000000000000L;
return random63BitLong + variant3BitFlag;
}
private static long get64MostSignificantBitsForVersion1() {
LocalDateTime start = LocalDateTime.of(1582, 10, 15, 0, 0, 0);
Duration duration = Duration.between(start, LocalDateTime.now());
long seconds = duration.getSeconds();
long nanos = duration.getNano();
long timeForUuidIn100Nanos = seconds * 10000000 + nanos * 100;
long least12SignificatBitOfTime = (timeForUuidIn100Nanos & 0x000000000000FFFFL) >> 4;
long version = 1 << 12;
return
(timeForUuidIn100Nanos & 0xFFFFFFFFFFFF0000L) + version + least12SignificatBitOfTime;
}
接下来,您可以使用上述方法来构建一个UUID:
public static UUID generateType1UUID() {
long most64SigBits = get64MostSignificantBitsForVersion1();
long least64SigBits = get64LeastSignificantBitsForVersion1();
return new UUID(most64SigBits, least64SigBits);
}
答案 1 :(得分:0)
答案:
我终于发现,您可以通过生成器使用自定义UUID,并且它可以在多个设备上使用。 UUID必须是唯一的,并且不得与常见和公共的UUID冲突。 希望有人觉得它有用