Сканирование штрих-кода с жестким и программным триггером EMDK

У нас есть собственный сканер для сканирования штрих-кода, который работает с триггером SOFT (используя кнопку приложения) с использованием библиотеки Motorola emdk.

barcodeManager = (BarcodeManager) this.emdkManager.getInstance(EMDKManager.FEATURE_TYPE.BARCODE);  
scanner = barcodeManager.getDevice(BarcodeManager.DeviceIdentifier.DEFAULT);  
scanner.addStatusListener(articleListener);  
scanner.addDataListener(new Scanner.DataListener() {  
    @Override  
    public void onData(ScanDataCollection scanDataCollection) {  
        processData(scanDataCollection);  
    }  
});  
scanner.addDataListener(dataListener);  
scanner.triggerType = Scanner.TriggerType.SOFT_ALWAYS;  
scanner.enable();  

Как я могу иметь как программный, так и жесткий триггер для сканирования данных? а с помощью datalistener обрабатывать данные, полученные от обоих?


person Dineshkumar    schedule 05.02.2016    source источник


Ответы (1)


Zebra Technologies приобрела корпоративный бизнес Motorola Solution в октябре 2014 г. Большая часть обновленной документации теперь доступна на панели запуска Zebra. .

Scanner.TriggerType управляет тем, как вы хотите активировать сканер штрих-кода на устройствах Zebra Android, обычно вы можете настроить его либо Hard (сканирование активируется нажатием аппаратной триггерной кнопки), либо Soft (сканирование активируется, как только вы вызываете метод Scanner.read()).< br> Чтобы иметь приложение, которое может использовать аппаратный триггер и иметь экранную кнопку для активации сканера, вы можете оставить для параметра triggerType значение Scanner.TriggerType.HARD и реализовать вход в обработчик события щелчка для мягкого сканирования. кнопку, чтобы установить для TriggerType значение Scanner.TriggerType.SOFT_ONCE, а затем вызвать метод Scanner.read(). В конечном итоге вы можете проверить, не активен ли другой активный режим чтения.
Это пример реализации, которую вы можете протестировать, добавив кнопку в Пример API штрих-кода включен в EMDK для Android (последняя версия 4.0):

private void softScan() {
    if (scanner != null) {
        try {
            // Reset continuous flag
            bContinuousMode = false;
            if (scanner.isReadPending()) {
                // Cancel the pending read.
                scanner.cancelRead();
            }
            scanner.triggerType = TriggerType.SOFT_ONCE;
            scanner.read();

            new AsyncUiControlUpdate().execute(true);
        } catch (ScannerException e) {
            textViewStatus.setText("Status: " + e.getMessage());
        }
    }
}

Таким образом, обычно вы работаете с TriggerType.HARD, но когда вы нажимаете кнопку SCAN, вы отключаете все ожидающие чтения и переключаетесь на TriggerType.SCAN_ONCE.
Реализации прослушивателя состояния необходимо переключить сканер обратно на TriggerType.HARD и вызовите метод read().

Вы можете найти полный пример в этом репозитории github, где я добавил кнопку Soft Scan в стандартную кнопку Zebra. Образец API штрих-кода EMDK.

введите здесь описание изображения

Все данные принимаются одним и тем же прослушивателем данных.

person pfmaggi    schedule 06.02.2016
comment
для чего bContinuousMode? также AsyncUiControlUpdate() это обязательно?. К сожалению, это не работает для меня. - person Dineshkumar; 16.02.2016
comment
Привет, Динеш, как я уже писал, эта функция соответствует образцу Zebra EMDK v4.0 Barcode API. bContinousMode — это флаг в примере приложения, который повторно активирует сканер после считывания штрих-кода. AsyncUIControlUpdate() необходим, потому что обратный вызов, поступающий из API штрих-кода, не гарантирует, что он будет в потоке пользовательского интерфейса. - person pfmaggi; 17.02.2016
comment
Кроме того, если какие-либо разработчики Xamarin ищут этот же пример в Xamarin, его можно найти здесь techdocs.zebra.com/emdk-for-xamarin/2-2/samples/barcode. Пакет nuget также был недавно перенесен из компонента Xamarin и доступен здесь: nuget. org/packages/Symbol.XamarinEMDK# - person Chucky; 27.08.2018
comment
Обратите внимание, что образец, на который я ссылаюсь, предназначен для Xamarin-Android. - person Chucky; 27.08.2018