gpt4 book ai didi

android - 按服务数据 UUID 的 BLE 扫描过滤器

转载 作者:行者123 更新时间:2023-12-04 13:40:00 24 4
gpt4 key购买 nike

我们的设备使用 «Service Data - 128-bit UUID» AD 类型来信标数据:0x21。
对于 Android 扫描,我们通过 MAC 地址过滤 BLE 设备。
它工作正常。

因为我们需要更大的灵 active ,所以我们想按 UUID 进行过滤。

我的代码仅适用于小米 MI9 (Android 9)。

它不适用于小米 MI A1 (Android 9) 和华为 P10 (Android 8)。
(但是当我使用另一个应用程序启动 BLE 扫描仪时,它可以工作,比如 nRF Connect)

任何人都知道如何解决这个问题,或者某些手机根本不支持某些类型的过滤?

static final UUID SERVICE_DATA_UUID = UUID.fromString("00010001-0000-1000-8000-112233445566");

byte[] setServiceData = new byte[] {
0x11
};

filters = new ArrayList<>();
ScanFilter.Builder builder = new ScanFilter.Builder()
.setServiceData(new ParcelUuid(SERVICE_DATA_UUID), setServiceData);
//.setDeviceAddress(Globals.MAC[1]);
filters.add(builder.build());

mBluetoothLeScanner.startScan(filters, settings, mLeScanCallback);

Logcat 工作时(MI9 或当我并行激活 nRF 时)
D/Constraints: ScanRecord [mAdvertiseFlags=2, mServiceUuids=null, mServiceSolicitationUuids=null, mManufacturerSpecificData={}, mServiceData={00020001-0000-1000-8000-112233445566=[17]}, mTxPowerLevel=-2147483648, mDeviceName=null]

最佳答案

掩码不应该全为零——如果是这样,它将不匹配任何东西。它通常应设置为如下所示,以便匹配服务 UUID 的所有字节:

 String serviceUuidMaskString = "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF";
ParcelUuid parcelUuidMask = ParcelUuid.fromString(serviceUuidMaskString);
builder.setServiceUuid(new ParcelUuid(SERVICE_DATA_UUID), parcelUuidMask);

我怀疑您使用的全零掩码适用于某些设备而不是其他设备,因为全零掩码的行为是不确定的。它可能因一个 BLE 芯片组而异。

大多数现成的移动应用程序不使用扫描过滤器,因此它们不能很好地判断过滤器是否适用于特定设备。

关于android - 按服务数据 UUID 的 BLE 扫描过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58643674/

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