Метод обратного вызова вызывается только при подключении отладчика

Я пишу приложение для 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());
        }
    });
}

Я знаю, что информации немного, но я могу только надеяться, что у некоторых из вас есть идея, в чем может быть проблема.

Не зная, что делает интерфейс, нам трудно оценить, в чем проблема. Вам нужно больше поделиться, например, что делает startMeasurement, фрагмент кода.

Andrei Toader 25.07.2019 11:20
0
1
484
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Скорее всего, периферийное устройство выполняет дополнительную настройку после подключения. Таким образом, установка точек останова в onDeviceConnected дает ему время для этого.

Как вы сказали, не так много информации, но возможно, что периферийное устройство отправляет результаты измерений через уведомление/индикацию. Таким образом, периферийному устройству требуется время для их настройки перед началом измерений.

Попробуйте добавить задержку в onDeviceConnected перед началом измерения. В идеале ваша библиотека будет иметь обратный вызов, аналогичный onDeviceReady, который вы могли бы использовать вместо этого.

Другие вопросы по теме