BLE застрял на вызове RSSI - PullRequest
0 голосов
/ 31 мая 2018

В моем приложении для 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 никогда не вызывается. Я пытался напечататьрегистрирует состояние гатта:

  • состояние такое же, как и раньше: 12 означает «ВКЛ».
  • mBluetoothGatt не равен нулю.
  • режим сканированиято же, что и раньше: 21, что означает «подключаемый».
  • isDiscovering = false
  • подключенное устройство не равно нулю и имеет тот же mac-адрес.

Приложение реагирует и не застревает, только данные перестают течь, а исключение rssi продолжает появляться (приложение не разрушается).

Я не знаю, что еще проверить: (

************************** РЕДАКТИРОВАТЬ **************************** Я старался установить вызов rssi каждые 5 секунд (вместо 1), это не помогло.когда я прокомментировал вызов rssi, проблема не возникла (мне нужно дольше его тестировать), но я думаю, что проблема связана с вызовом rssi.Есть предложения?

...