android - BLE 卡在 RSSI 呼叫上
问题描述
在我的 android 应用程序中,从 BLE 设备收集数据并将其绘制到图表中,我使用处理程序进行各种调用,其中之一是读取 RSSI 值。该应用程序运行良好,但 40 分钟后数据停止出现,并且图表显然停止绘制,并且我一遍又一遍地收到以下异常(每次我设置处理程序以调用 RSSI 读取:
I/HANDLER:: MSG_CHECK_RSSI
D/BluetoothGatt: readRssi() - device: 03:80:E1:55:34:XX
E/BluetoothGatt: android.os.DeadObjectException
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(Binder.java:628)
at android.bluetooth.IBluetoothGatt$Stub$Proxy.readRemoteRssi(IBluetoothGatt.java:1147)
at android.bluetooth.BluetoothGatt.readRemoteRssi(BluetoothGatt.java:1318)
at com.nanovation.senseguard_monitor.SensorPlotting.handleMessage(SensorPlotting.java:715)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:154)
at android.os.HandlerThread.run(HandlerThread.java:61)
D/BluetoothAdapter: onBluetoothStateChange: up=true
onBluetoothStateChange: Bluetooth is on
D/BluetoothGatt: onBluetoothStateChange: up=true
onBluetoothStateChange: Bluetooth is on
D/BluetoothGatt: onBluetoothStateChange: up=true
onBluetoothStateChange: Bluetooth is on
D/BluetoothGatt: onBluetoothStateChange: up=true
onBluetoothStateChange: Bluetooth is on
D/BluetoothGatt: onBluetoothStateChange: up=true
onBluetoothStateChange: Bluetooth is on
D/BluetoothGatt: onBluetoothStateChange: up=true
onBluetoothStateChange: Bluetooth is on
D/BluetoothGatt: onBluetoothStateChange: up=true
onBluetoothStateChange: Bluetooth is on
D/BluetoothGatt: onBluetoothStateChange: up=true
onBluetoothStateChange: Bluetooth is on
I/HANDLER:: MSG_CHECK_RSSI
D/BluetoothGatt: readRssi() - device: 03:80:E1:55:34:XX
E/BluetoothGatt: android.os.DeadObjectException
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(Binder.java:628)
at android.bluetooth.IBluetoothGatt$Stub$Proxy.readRemoteRssi(IBluetoothGatt.java:1147)
at android.bluetooth.BluetoothGatt.readRemoteRssi(BluetoothGatt.java:1318)
at com.nanovation.senseguard_monitor.SensorPlotting.handleMessage(SensorPlotting.java:715)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:154)
at android.os.HandlerThread.run(HandlerThread.java:61)
我在处理程序中的代码:
case MSG_CHECK_RSSI:
logger.finer("MSG_CHECK_RSSI");
Log.i(HANDLER_TAG, "MSG_CHECK_RSSI");
if (mBluetoothGatt != null)
{
try
{
mBluetoothGatt.readRemoteRssi();
}
catch (Exception e)
{
e.printStackTrace();
Log.i("read rssi", "mBluetoothGatt.readRemoteRssi() problem");
}
}
checkRssi();
break;
调用方法:
private void checkRssi()
{
//check rssi every X time
bleHandler.sendEmptyMessageDelayed(MSG_CHECK_RSSI, 1000);
}
即使它在 try catch 块中,catch 块也不会被调用。我尝试打印有关 gatt 状态的日志:
- 状态与之前相同:12 表示“ON”。
- mBluetoothGatt 不为空。
- 扫描模式和以前一样:21,表示“可连接”。
- isDiscovering = 假
- 连接的设备不为空并且具有相同的mac地址。
该应用程序具有响应性并且没有卡住,只是数据停止流动并且不断出现 rssi 异常(应用程序不会崩溃)。
我不知道还要检查什么:(
************************** 编辑 *********************** ***** 我尝试将 rssi 调用设置为每 5 秒(而不是 1 秒),但没有帮助。当我评论 rssi 调用时,问题没有发生(我需要测试更长时间),但我想问题出在 rssi 调用上。有什么建议么?
解决方案
推荐阅读
- phalcon - 如何修复 phalcon 配置中的“未定义索引:db_host”
- kubernetes - Kubernetes:验证对自定义资源的更新请求
- javascript - 如何使 Fetch API 从 JSON 文件返回一个键及其值,而不是在控制台中返回整个文件
- javascript - 工作箱 vuejs 在生产和快递中的路由问题
- google-sheets - How to reference 2 other pages (3 including the one I call the function on) in one query function?
- c - 数据类型和格式说明符
- ios - 我需要将变量中的值传递给我的参数
- java - 如何使用 java 代码更改 json 对象中的任何属性值
- node.js - 如何在 Heroku 上跳过 npm 错误?
- angular - 如何从 API 调用/获取 out 参数到 Angular4