gpt4 book ai didi

android - 具有 128 位 UUID 的 startLeScan 不适用于 native Android BLE 实现

转载 作者:IT老高 更新时间:2023-10-28 21:42:51 26 4
gpt4 key购买 nike

我在使用 startLeScan( new UUID[]{ MY_DESIRED_128_BIT_SERVICE_UUID }, callback ) 时遇到问题在我的 Nexus 4 上新引入的 Android 4.3 BLE API。

回调只是没有被调用。我仍然可以在日志中看到传入的包:

08-02 15:48:57.985: I/bt-hci(1051): btu_ble_process_adv_pkt
08-02 15:48:58.636: I/bt-hci(1051): BLE HCI(id=62) event = 0x02)

如果我不使用该参数来过滤 UUID,它会起作用。我们正在为我们公司的设备使用制造商特定的 128 位 UUID

现在,我们的设备提供的服务比我在阵列中提供的更多。但这应该不是问题。

有人遇到同样的问题吗?有什么解决办法吗?

编辑

扫描有几个问题,本题只讨论一个:如果你也有扫描方面的问题,请阅读this comment第一的。还要记住,我的设备强制使用 16 位和 128 位 UUID。你们中的大多数人使用 BLE 标准提供的 16 位 UUID,例如心率或速度和节奏。

最佳答案

@Navin 的代码不错,但它包含原始 16 位 Android 代码的溢出错误。 (如果任一字节大于 127 则变为负整数。)

这是一个修复该错误的实现并且添加了 128 位支持:

private List<UUID> parseUuids(byte[] advertisedData) {
List<UUID> uuids = new ArrayList<UUID>();

ByteBuffer buffer = ByteBuffer.wrap(advertisedData).order(ByteOrder.LITTLE_ENDIAN);
while (buffer.remaining() > 2) {
byte length = buffer.get();
if (length == 0) break;

byte type = buffer.get();
switch (type) {
case 0x02: // Partial list of 16-bit UUIDs
case 0x03: // Complete list of 16-bit UUIDs
while (length >= 2) {
uuids.add(UUID.fromString(String.format(
"%08x-0000-1000-8000-00805f9b34fb", buffer.getShort())));
length -= 2;
}
break;

case 0x06: // Partial list of 128-bit UUIDs
case 0x07: // Complete list of 128-bit UUIDs
while (length >= 16) {
long lsb = buffer.getLong();
long msb = buffer.getLong();
uuids.add(new UUID(msb, lsb));
length -= 16;
}
break;

default:
buffer.position(buffer.position() + length - 1);
break;
}
}

return uuids;
}

关于android - 具有 128 位 UUID 的 startLeScan 不适用于 native Android BLE 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18019161/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com