蓝牙GATT UUID

时间:2016-04-20 08:58:49

标签: 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

有没有正确的方法呢?

1 个答案:

答案 0 :(得分:1)

我用这个:

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;
}

我没有测试它。