Я пишу приложение для Android, которое подключается к устройству BLE и показывает конечный результат измерения. Я использую библиотеку компании для связи с устройством, и проблема заключается в том, что функции обратного вызова (onMeasurementFinished, onMeasurementFailed и т. д.) вызываются только в том случае, если я устанавливаю точку останова и запускаю приложение с подключенным отладчиком.
Вот как я подключаюсь к устройству:
@Override
public void onClick(View view) {
try {
if (view.getId() == R.id.btnConnect) {
deviceArm.scan(this, this);
}
} catch (Exception ex) {
Toast.makeText(this, ex.getMessage(), Toast.LENGTH_SHORT).show();
}
}
Это обратный вызов сканирования, которое работает:
@Override
public void onDeviceConnected() {
txtResults.setText("Connected");
deviceArm.startMeasurement(this);
}
Это обратные вызовы startMeasurement, которые работают только при отладке:
@Override
public void onMeasurementError(Error error) {
runOnUiThread(new Runnable() {
@Override
public void run() {
txtResults.setText("Error");
}
});
}
@Override
public void onMeasurementFinished(MeasurementType measurementType, final Object o) {
runOnUiThread(new Runnable() {
@Override
public void run() {
txtResults.setText("Finished"+o.toString());
}
});
}
@Override
public void onMeasurementStarted() {
}
@Override
public void onMeasurementProgress(final MeasurementType measurementType, final Object o) {
runOnUiThread(new Runnable() {
@Override
public void run() {
txtResults.setText(o.toString());
}
});
}
Я знаю, что информации немного, но я могу только надеяться, что у некоторых из вас есть идея, в чем может быть проблема.
Скорее всего, периферийное устройство выполняет дополнительную настройку после подключения. Таким образом, установка точек останова в onDeviceConnected дает ему время для этого.
Как вы сказали, не так много информации, но возможно, что периферийное устройство отправляет результаты измерений через уведомление/индикацию. Таким образом, периферийному устройству требуется время для их настройки перед началом измерений.
Попробуйте добавить задержку в onDeviceConnected перед началом измерения. В идеале ваша библиотека будет иметь обратный вызов, аналогичный onDeviceReady, который вы могли бы использовать вместо этого.
Не зная, что делает интерфейс, нам трудно оценить, в чем проблема. Вам нужно больше поделиться, например, что делает startMeasurement, фрагмент кода.