Android 中多个蓝牙连接的自定义 UUID
Custom UUID for multiple Bluetooth connection in Android
我有一个 android 设备作为服务器连接到多个蓝牙 android 客户端。
我了解 UUID 的概念及其独特之处。
我的问题是,我可以为连接到我的服务器的所有客户端使用相同的 UUID 吗?
如果没有,我如何以编程方式为我的客户生成 UUID 并让我的服务器知道他们的 UUID。
问题在 Android 8.1 之后开始出现,您无法再访问我最初用于为客户端 android 设备生成 UUID 的蓝牙 MAC 地址。
答案:
我终于发现您可以使用生成器使用自定义 UUID,它适用于多个设备。
UUID 必须是唯一的,并且不应与常见的 & public 冲突。
希望有人觉得有用
你可以这样生成一个。
首先,需要生成 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);
}
我有一个 android 设备作为服务器连接到多个蓝牙 android 客户端。 我了解 UUID 的概念及其独特之处。
我的问题是,我可以为连接到我的服务器的所有客户端使用相同的 UUID 吗? 如果没有,我如何以编程方式为我的客户生成 UUID 并让我的服务器知道他们的 UUID。
问题在 Android 8.1 之后开始出现,您无法再访问我最初用于为客户端 android 设备生成 UUID 的蓝牙 MAC 地址。
答案:
我终于发现您可以使用生成器使用自定义 UUID,它适用于多个设备。 UUID 必须是唯一的,并且不应与常见的 & public 冲突。 希望有人觉得有用
你可以这样生成一个。 首先,需要生成 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);
}