У нас есть устройства, которые передают данные с типом AD «Сервисные данные - 128-битный UUID»: 0x21. Для сканирования Android мы фильтруем устройство BLE по MAC-адресам. Это работает нормально.
Поскольку нам нужна большая гибкость, мы хотим фильтровать по UUID.
Мой код работает нормально только с Xiaomi MI9 (Android 9).
Это нене работает на Xiaomi MI A1 (Android 9) и Huawei 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]