Android: завершение сканирования ZBar после передачи результата

У меня есть активность под названием ScanRouter, которая вызывает сканер ZBar через startActivityForResult. Как только я сканирую код, onActivityResult в ScanRouter обрабатывает результат, передает результат другому действию через намерения, а ScanRouter выполняет «finish ()».

Однако после того, как результат будет передан новому действию, при нажатии кнопки «Назад» ScanRouter повторно открывает ZBar. Если я установлю для ScanRouter значение noHistory=true, то onActivityResult не будет работать.

Как предотвратить повторный запуск ScanRouter при нажатии кнопки «Назад»? Я думал, что finish() удалит его из стека, но это, по-видимому, не так. Я хотел бы вернуться к активности, которая изначально называлась ScanRouter, а не сам ScanRouter.

ScanRouter: важная часть кода

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
        case ZBAR_SCANNER_REQUEST:
        case ZBAR_QR_SCANNER_REQUEST:
        if (resultCode == RESULT_OK) {
            // TODO go back to the caller and give them the result
            String value = data.getStringExtra(ZBarConstants.SCAN_RESULT);
            **returnIntent(value);**
        } else if(resultCode == RESULT_CANCELED && data != null) {
            // TODO go back to the caller and give them the error
            String error = data.getStringExtra(ZBarConstants.ERROR_INFO);
            if(!TextUtils.isEmpty(error)) {
                Toast.makeText(this, error, Toast.LENGTH_SHORT).show();
            }
        }
        break;
    }
}

protected void returnIntent(String value) {
    Intent intent = new Intent(this, Manager.class);
    intent.putExtra("operation", caller);
    intent.putExtra("code", value);
    startActivity(intent);
    **this.finish();**
}

person jroot.zen    schedule 25.06.2013    source источник
comment
Не могли бы вы опубликовать код, в котором вы передаете результат новому действию и вызываете finish() в ScanRouter, пожалуйста?   -  person Cata    schedule 25.06.2013
comment
@Cata Я добавил соответствующий код ... Спасибо за обзор.   -  person jroot.zen    schedule 26.06.2013
comment
Код выглядит нормально, вы уверены, что не открываете ScanRouter дважды?   -  person Cata    schedule 26.06.2013
comment
@Cata Да ... Я проверял это несколько раз. Поток заключается в том, что другая деятельность представляет фрагмент. Действие пользователя приводит к срабатыванию ScanRouter, который открывает ZBar. Результат возвращается и отправляется обратно в тот фрагмент, который в нем нуждается. Если вы нанесете ответный удар в этот момент, вы перезапустите ScanRouter, который снова откроет ZBar. Если вы продолжите операцию вперед, она, похоже, будет удалена из стека. Но, кажется, он не выключает ScanRouter, когда я хочу...   -  person jroot.zen    schedule 26.06.2013


Ответы (1)


Попробуйте поставить finish() в конце returnIntent вместо this.finish();

person jekeyeke    schedule 13.09.2013