У меня есть приложение android, в котором после подключения к thingy52 через библиотеку (thingylib):
BluetoothDevice dev = scanResultList.get(nordicDeviceEntityList.get(pos).getAddress());
thingySdkManager.connectToThingy(getContext(), device, BaseTService.class);
Я хотел бы прочитать Nordy c thingy: 52 данных вместе с Значение RSSI, поэтому в другом упражнении, когда я хочу собрать данные, я присоединяю новый блютуз GATT:
private void startDataCollection() {
for (BluetoothDevice dev : thingySdkManager.getConnectedDevices()){
thingySdkManager.setConstantLedMode(dev, 1, 100, 1);
ThingyListenerHelper.registerThingyListener(getApplicationContext(), mThingyListener, dev);
//e vents
thingySdkManager.enableMotionNotifications(dev, true);
gatt = dev.connectGatt(getApplicationContext(), true, gattCallback);
}
}
После этого к обратному вызову события Accellerometer thingylib я получаю данные и вызываю GATT для получения значения RSSI:
@Override
public void onAccelerometerValueChangedEvent(BluetoothDevice bluetoothDevice, float x, float y, float z) {
gatt.readRemoteRssi();
}
Проблема, которую я обнаружил, состоит в том, что через несколько секунд (не детерминистически, иногда 5/10 с) устройство отключается с ошибкой 8 в GATT (ошибка тайм-аута). Если я удаляю ссылку GATT перед сбором данных, устройство не отключается и работает отлично. Я хотел знать, есть ли способ предотвратить тайм-аут подключенного GATT или я делаю что-то не так.
Мой android журнал:
2020-04-02 13:00:16.607 15336-15396/it.chiarani.beacon_detection D/BluetoothGatt: onClientConnectionState() - status=8 clientIf=9 device=F5:EF:EE:8B:92:7C
2020-04-02 13:00:16.609 15336-15380/it.chiarani.beacon_detection D/BluetoothGatt: onClientConnectionState() - status=8 clientIf=11 device=F5:EF:EE:8B:92:7C
2020-04-02 13:00:16.609 15336-15654/it.chiarani.beacon_detection D/BluetoothGatt: onClientConnectionState() - status=8 clientIf=10 device=F5:EF:EE:8B:92:7C
2020-04-02 13:00:16.610 15336-15654/it.chiarani.beacon_detection V/ThingyConnection: Error 8 : F5:EF:EE:8B:92:7C
2020-04-02 13:00:16.611 15336-15654/it.chiarani.beacon_detection D/BluetoothGatt: close()
2020-04-02 13:00:16.611 15336-15654/it.chiarani.beacon_detection D/BluetoothGatt: unregisterApp() - mClientIf=10
2020-04-02 13:00:16.670 15336-15336/it.chiarani.beacon_detection V/ViewRootImpl: The specified message queue synchronization barrier token has not been posted or has already been removed