Android中用于多个蓝牙连接的自定义UUID

时间:2018-10-05 17:41:40

标签: android bluetooth uuid

我有一个充当服务器的android设备,该设备连接到多个蓝牙android客户端。 我了解UUID的概念及其独特性。

我的问题是,我可以对连接到服务器的所有客户端使用相同的UUID吗? 如果没有,我该如何以编程方式为客户端生成UUID,并让服务器知道其UUID。

在Android 8.1之后,问题开始出现,您再也无法访问我最初用来为客户端android设备生成UUID的蓝牙MAC地址。

2 个答案:

答案 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冲突。 希望有人觉得它有用