Seb*_*ien 5 android bluetooth-lowenergy beacon
我们的设备使用 \xc2\xabService 数据发送信标数据 - 128 位 UUID\xc2\xbb AD 类型:0x21。\n对于 Android 扫描,我们通过 MAC 地址过滤 BLE 设备。\n效果很好。
\n\n因为我们需要更大的灵活性,所以我们想通过 UUID 进行过滤。
\n\n我的代码仅适用于小米9(Android 9)。
\n\n它不适用于小米 MI A1 (Android 9) 和华为 P10 (Android 8)。\n(但当我使用其他应用程序(例如 nRF Connect)启动 BLE 扫描仪时它可以工作)
\n\n任何人都知道如何解决这个问题,或者某些手机根本不支持某些类型的过滤?
\n\nstatic final UUID SERVICE_DATA_UUID = UUID.fromString("00010001-0000-1000-8000-112233445566");\n\nbyte[] setServiceData = new byte[] {\n 0x11\n};\n\nfilters = new ArrayList<>();\nScanFilter.Builder builder = new ScanFilter.Builder()\n .setServiceData(new ParcelUuid(SERVICE_DATA_UUID), setServiceData);\n //.setDeviceAddress(Globals.MAC[1]);\n filters.add(builder.build());\n\nmBluetoothLeScanner.startScan(filters, settings, mLeScanCallback);\nRun Code Online (Sandbox Code Playgroud)\n\nLogcat 工作时(MI9 或当我并行激活 nRF 时)
\n\nD/Constraints: ScanRecord [mAdvertiseFlags=2, mServiceUuids=null, mServiceSolicitationUuids=null, mManufacturerSpecificData={}, mServiceData={00020001-0000-1000-8000-112233445566=[17]}, mTxPowerLevel=-2147483648, mDeviceName=null]\nRun Code Online (Sandbox Code Playgroud)\n
掩码不应全为零——如果是这样,它将不匹配任何内容。通常应将其设置为如下所示,以便与服务 UUID 的所有字节匹配:
String serviceUuidMaskString = "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF";
ParcelUuid parcelUuidMask = ParcelUuid.fromString(serviceUuidMaskString);
builder.setServiceUuid(new ParcelUuid(SERVICE_DATA_UUID), parcelUuidMask);
Run Code Online (Sandbox Code Playgroud)
我怀疑您使用的全零掩码适用于某些设备,而不适用于其他设备,因为全零掩码的行为是不确定的。不同 BLE 芯片组的情况可能有所不同。
大多数现成的移动应用程序不使用扫描过滤器,因此它们不能很好地判断过滤器是否在特定设备上工作。
| 归档时间: |
|
| 查看次数: |
8953 次 |
| 最近记录: |