Сканирование Android BLE без разбора ScanRecord на некоторых устройствах

#android #bluetooth #bluetooth-lowenergy #bluetoothlescanner

Вопрос:

Моя проблема в том, что на некоторых устройствах ScanResult.getDevice() или ScanResult.getScanRecord() оба возвращают значение null на некоторых устройствах Android, но отлично работают на большинстве. Если я не могу getDevice() надежно позвонить, как я могу подключиться?

Когда я смотрю на строку результатов в моем onScanResult обратного вызова, я вижу небольшую разницу между устройствами, которые работают и не работают.

Это строка результата с неисправным устройством.

 {device=F1:6B:2E:01:43:88, scanRecord=ScanRecord [mAdvertiseFlags=5, mServiceUuids=null, mServiceSolicitationUuids=[], mManufacturerSpecificData={}, mServiceData={}, mTxPowerLevel=-2147483648, mDeviceName=MYDEVICE], rssi=-38, timestampNanos=10844927511936, eventType=27, primaryPhy=1, secondaryPhy=0, advertisingSid=255, txPower=127, periodicAdvertisingInterval=0}
 

Это строка результата с рабочим устройством.

 {device=F1:6B:2E:01:43:88, scanRecord=ScanRecord [mAdvertiseFlags=5, mServiceUuids=null, mServiceSolicitationUuids=[], mManufacturerSpecificData={}, mServiceData={}, mTxPowerLevel=-2147483648, mDeviceName=MYDEVICE, **mTDSData=null**], rssi=-65, timestampNanos=131383632077590, eventType=27, primaryPhy=1, secondaryPhy=0, advertisingSid=255, txPower=127, periodicAdvertisingInterval=0}
 

Единственное отличие, которое я заметил, заключалось в том, что неисправное устройство не включает mTDSData=null

Подробности моей настройки:

  • nrf51422 BLE периферийное устройство.
  • Компиляция Android api 30 мин api 23
  • Рабочее устройство Moto G7 под управлением Android 10 с Bluetooth 4.2
  • Неисправное устройство RCA 7″ под управлением Android 10 с Bluetooth 4.0