Java BLE Android API-onCharacteristicChanged()上的数据包丢失和数据频率下降,并带有通知

Java BLE Android API-onCharacteristicChanged()上的数据包丢失和数据频率下降,并带有通知,java,android,kotlin,bluetooth,bluetooth-lowenergy,Java,Android,Kotlin,Bluetooth,Bluetooth Lowenergy,我正在使用ble,我想从Android设备上读取数据(目前仅限于rawdata,EF680406-9B35-4933-9B10-52FFA9740042) 根据原始数据特性,北欧设备允许最大采样率为200Hz。尝试通过raspberry连接时,我验证了事实上启用rawdata通知后,我以200Hz的频率接收数据。 我需要在我的android设备(Oneplus6)上做同样的事情 我尝试过不同的库(RxJavaBLE、Nordic Android BLE、KABLE),我也尝试过直接使用Andro

我正在使用ble,我想从Android设备上读取数据(目前仅限于rawdata,
EF680406-9B35-4933-9B10-52FFA9740042

根据原始数据特性,北欧设备允许最大采样率为200Hz。尝试通过raspberry连接时,我验证了事实上启用rawdata通知后,我以200Hz的频率接收数据。 我需要在我的android设备(Oneplus6)上做同样的事情

我尝试过不同的库(RxJavaBLE、Nordic Android BLE、KABLE),我也尝试过直接使用Android BLE API,但问题是,即使我设置了我能够找到的所有参数,我也没有达到200Hz的频率,但最多为160Hz-180Hz,几秒钟后,数据接收频率也急剧下降到30-40Hz

我与设备的连接:

device.connectGatt(上下文、false、回调、BluetoothDevice.TRANSPORT\LE)
(我试过使用和不使用
BluetoothDevice.TRANSPORT\u LE

之后,连接后,我调用经典的discoveryService(),并在
onServicesDiscovery()内完成设置:

requestMtu(设备,23)
requestConnectionPriority(蓝牙网关连接优先级高)
我尝试了MAX_MTU和MIN_MTU(23),我也尝试了使用连接优先级,但在采样频率上仍然没有差异

启用rawdata通知后,我会在
onCharacteristicChanged()
方法中读取它们

我还尝试设置连接参数的最小值,并在测试期间改变它们,例如:

advertising interval 20ms
advertising timeout 0ms
min connection interval 7,5ms
max connection interval 20ms
slave latency 0
supervision timeout 1000ms
但是,我仍然无法得到或200Hz,因为在onCharacteristicRead中接收到的数据的频率,特别是在几秒钟后,频率急剧下降。 问题的原因可能是什么?如何以更恒定的方式使频率尽可能接近200Hz

与使用Nordic Raspberry连接执行的测试相比,是我的Android设备丢失了数据包吗?android蓝牙缓冲区会有问题吗

我在手机和其他手机(三星和realme)上运行的测试也受到相同问题的影响。 我尝试在互联网上搜索类似的问题,但找不到问题的答案

我感谢你的回答和帮助,
谢谢

您不应该使用通知而不是读取操作吗?我目前正在使用通知。我为rawdata功能启用通知(
EF680406-9B35-4933-9B10-52FFA9740042
),并通过在
onCharacteristicChanged
中接收通知来监听。我不明白的是,为什么我在最初几秒钟内得到200个值,一分钟后下降到80-100个值。