java - 蓝牙 GATT UUID

标签 java android bluetooth gatt

我正在尝试构建一个使用 BluetoothLE 的 Android 应用程序。在教程中,他们使用 128 位 UUID,但我只有 16 位 UUID。 我必须使用服务 UUID 和蓝牙基地创建一个新的 128 位 UUID。

示例:

  • 警报通知服务 UUID(16 位)=> 0x1811
  • 蓝牙基础 UUID(128 位)=> 00000000-0000-1000-8000-00805F9B34FB

通过组合这两个 UUID,我们收到...

  • 警报通知服务 UUID(128 位)=> 00001811-0000-1000-8000-00805F9B34FB

有没有正确的方法来做到这一点?

最佳答案

我用这个:

public class BLEUtils {

    public static final long BT_UUID_LOWER_BITS = 0x800000805F9B34FBl;
    public static final long BT_UUID_UPPER_BITS = 0x1000l;
    public static final long BT_CCCD_SHORT_UUID = 0x2902l;
    public static final UUID BT_CCCD_UUID = get16BitBTUUID(BT_CCCD_SHORT_UUID);

    public static UUID get16BitBTUUID(long uuid) {
        return new UUID(BT_UUID_UPPER_BITS + (uuid << 32), BT_UUID_LOWER_BITS);
    }
}

您的示例看起来很正常。是否被其他设备正确识别?

编辑: 评论中要求的反向操作是:

public static long getShortUuid(UUID uuid) {
    long result = uuid.getMostSignificantBits();
    result = result - BT_UUID_UPPER_BITS;
    result = result >> 32;
    return result;
}

虽然我没有测试它。

关于java - 蓝牙 GATT UUID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36738698/

相关文章:

bluetooth - 蓝牙 5 是否原生实现了 BR/EDR?

java - XML 反序列化 java XSTream 问题

java - 在 Java 中将 native 窗口句柄传递给 DLL

java - 如何在 Spring 型材的 spel 中编写 AND 运算符

android - Phonegap Android 链接 - 下载链接

python - BeagleBone 和 Python 的蓝牙串行问题

java - 准备好的语句的setString不起作用

android - 在旋转时调用 onCreate()

android - Android上的TimerTask是如何管理线程的?

c++ - 无法使用 C++ 中的 Window 蓝牙 API 连接到蓝牙设备