В моем приложении для 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.Есть предложения?