首页 > 解决方案 > 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 状态的日志:

该应用程序具有响应性并且没有卡住,只是数据停止流动并且不断出现 rssi 异常(应用程序不会崩溃)。

我不知道还要检查什么:(

************************** 编辑 *********************** ***** 我尝试将 rssi 调用设置为每 5 秒(而不是 1 秒),但没有帮助。当我评论 rssi 调用时,问题没有发生(我需要测试更长时间),但我想问题出在 rssi 调用上。有什么建议么?

标签: androidbluetooth-lowenergyrssi

解决方案


推荐阅读