首页 > 解决方案 > 更新房间数据库中的数据并更新视图后 BLE 连接突然失败

问题描述

我有一个最小 SDK 19 的 android 应用程序,看看我的场景:

  1. 点击按钮;
  2. BLE 扫描回调扫描 BLE 设备,如果它找到特定设备(我有特殊的 MAC 地址,发送给我;3.返回的对象有 ScannedBleDevice 类型,我得到它并运行 mGattCallback.connect(...);
  3. 我完美连接到设备,onConnectionStateChanged 等于 SUCCESS;
  4. 我写了一个特征然后读另一个;
  5. 我根据从 ble 设备接收到的数据更新 Room 数据库表;
  6. 活动视图上的 imageviews 和 textviews 同时更新,因为我在房间数据表上使用 livedata 类型;
  7. 正是在更新视图之后,我从 BLE 设备断开连接而没有收到任何 onConnectionStateChange 回调。

为什么?我不知道。请帮助我......我在这些链接中找到了一些东西,但不完全是我想要的:

Android:捕获 BLE 连接失败/断开连接?

Android - BLE 连接参数和在 SQLite 数据库中存储 BLE 传感器数据

Android ble 设备有时不会断开连接

标签: androidbluetooth-lowenergyandroid-viewandroid-room

解决方案


最后我找到了解决方案:我使用 MVVM 架构。当我的活动创建时,我从数据库中读取数据类型并在其上设置一个观察者。然后将数据设置为viewpager的适配器,并为每个数据行添加一个片段到viewpager;所以在我的一个片段中,我尝试连接到 ble 设备并且连接设置良好。立即从 ble 设备读取数据并保存在数据库中,因此将调用数据观察者,并且 viewpager 将新片段设置为查看,并且所有片段中的所有最后一个对象都永远消失了,所以对 ble 类的回调消失了,我失去了连接。我在第一次读取时将标志设置为真,在更改数据后我不读取。


推荐阅读