2

Я разрабатываю веб-приложение, которое должно использоваться на устройствах Honeywell Dolphin 75e под управлением Android 4.4. Встроенный считыватель штрих-кодов может работать в режиме «клавиатуры», но только в том случае, если текстовое поле имеет фокус.Capture barcode reader (клавиатура-клин) события из javascript

С настольных браузеров я могу использовать этот код, чтобы захватить считыватель штрих-кода события:

var BarcodesScanner = { 
    barcodeData: '', 
    deviceId: '', 
    symbology: '', 
    timestamp: 0, 
    dataLength: 0 
}; 

function onScannerNavigate(barcodeData, deviceId, symbology, timestamp, dataLength){ 
    BarcodesScanner.barcodeData = barcodeData; 
    BarcodesScanner.deviceId = deviceId; 
    BarcodesScanner.symbology = symbology; 
    BarcodesScanner.timestamp = timestamp; 
    BarcodesScanner.dataLength = dataLength; 
    $(BarcodesScanner).trigger('scan'); 
} 

BarcodesScanner.tmpTimestamp = 0; 
BarcodesScanner.tmpData = ''; 
$(document).on('keypress', function(e){ 
    e.stopPropagation(); 
    var keycode = (e.keyCode ? e.keyCode : e.which); 
    if (BarcodesScanner.tmpTimestamp < Date.now() - 500){ 
     BarcodesScanner.tmpData = ''; 
     BarcodesScanner.tmpTimestamp = Date.now(); 
    } 
    if (keycode == 13 && BarcodesScanner.tmpData.length > 0){ 
     onScannerNavigate(BarcodesScanner.tmpData, 'FAKE_SCANNER', '', BarcodesScanner.tmpTimestamp, BarcodesScanner.tmpData.length); 
     BarcodesScanner.tmpTimestamp = 0; 
     BarcodesScanner.tmpData = ''; 
    } else if (e.charCode && e.charCode > 0) { 
     BarcodesScanner.tmpData += String.fromCharCode(e.charCode); 
    } 
}); 

$(BarcodesScanner).on('scan', function(e){ 
    alert(); 
}); 

К сожалению, это не работает на Android. Есть ли API, позволяющий мне захватить эти события? Или другой браузер, который обрабатывает это?

EDIT:

я смог перехватить события считывания штрих-кода с помощью текстового поля в качестве буфера.

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

BarcodesScanner.tmpInput = $('<input />', { 
    type: 'text', 
    style: 'position: fixed; top: 0; right: 0; width: 0; height: 0;' 
}); 
$('body').append(BarcodesScanner.tmpInput); 
setInterval(function(){ 
    BarcodesScanner.tmpInput.focus(); 
}, 500); 
BarcodesScanner.tmpInput.on('input', function(e){ 
    if (BarcodesScanner.tmpInput.val().length > 0){ 
     onScannerNavigate(BarcodesScanner.tmpInput.val(), 'FAKE_SCANNER', 'WEDGE', Date.now(), BarcodesScanner.tmpInput.val().length); 
     BarcodesScanner.tmpInput.val('') 
    } 
}); 

ответ

4

я, наконец, получил функциональный ответ от поддержки Honeywell:

Я подозреваю, что приложение хочет получить данные, как KeyDown/ KeyUp событий.

Можете ли вы проверить следующее?

На клине как набор ключей: 9,10,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49 , 50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74 , 75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127

Screenshot

Как это может занять 15 минут, чтобы сделать это вручную, я создал этот код, который вы можете прочитать внутри клина в области ключей:

9,10,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127

После прочтения кода, пожалуйста, подождите 10 секунд перед сохранением и проверить , если данные корректно сохранены в этой области путем выхода и повторного ввода настроек сканера.

Наконец, отключите и снова включите сканер (или перезагрузите устройство).

После этого сканер должен работать над вашим приложением.

Надеюсь, это поможет.

Терминал должен использовать последнюю версию системы, чтобы увидеть поле «Клин как ключи». Не забудьте установить «\ n» в качестве суффикса.

При том, что код JS будет:

var BarcodesScanner = { 
    barcodeData: '', 
    deviceId: '', 
    symbology: '', 
    timestamp: 0, 
    dataLength: 0 
}; 

function onScannerNavigate(barcodeData, deviceId, symbology, timestamp, dataLength){ 
    BarcodesScanner.barcodeData = barcodeData; 
    BarcodesScanner.deviceId = deviceId; 
    BarcodesScanner.symbology = symbology; 
    BarcodesScanner.timestamp = timestamp; 
    BarcodesScanner.dataLength = dataLength; 
    $(BarcodesScanner).trigger('scan'); 
} 

BarcodesScanner.tmpTimestamp = 0; 
BarcodesScanner.tmpData = ''; 
$(document).on('keypress', function(e){ 
    e.stopPropagation(); 
    var keycode = (e.keyCode ? e.keyCode : e.which); 
    if (BarcodesScanner.tmpTimestamp < Date.now() - 500){ 
     BarcodesScanner.tmpData = ''; 
     BarcodesScanner.tmpTimestamp = Date.now(); 
    } 
    if (keycode == 13 && BarcodesScanner.tmpData.length > 0){ 
     onScannerNavigate(BarcodesScanner.tmpData, 'FAKE_SCANNER', 'WEDGE', BarcodesScanner.tmpTimestamp, BarcodesScanner.tmpData.length); 
     BarcodesScanner.tmpTimestamp = 0; 
     BarcodesScanner.tmpData = ''; 
    } else if (e.charCode && e.charCode > 0) { 
     BarcodesScanner.tmpData += String.fromCharCode(e.charCode); 
    } 
}); 

Теперь вы можете прослушать событие сканирования:

$(BarcodesScanner).on('scan', function(e){ 
    alert(BarcodesScanner.barcodeData); 
}); 

Я надеюсь, что это поможет кому-то еще.

+0

Спасибо, что поделились, это замечательный материал, и я смотрел на то же самое. Hower, в моем приложении клавиатура появляется каждый раз, когда я делаю сканирование. С этим тоже случается? любые советы о том, как избавиться от него? – user1051218

+0

Обычно клавиатура отображается только на входных полях, так что вы используете решение для захвата, отображаемое в этом ответе, или буфер текстового поля из редактирования исходного вопроса? Вы можете деактивировать его с помощью приложения, такого как Null Keyboard (https://play.google.com/store/apps/details?id=com.wparam.nullkeyboard&hl=fr). Какое у вас устройство? –

+1

Для пользователей Dolphin 75e без опции «Wedge as keys» вам необходимо обратиться в службу поддержки Honeywell, чтобы получить последнюю версию прошивки, поскольку она недоступна на их сайте из-за проблем с лицензированием. Соответствующий файл - 'PARISAD_56.01.13.0173.zip'. – SystemParadox

1

Вы пытались подписаться на различные элементы $ ('HTML, тело') и, возможно, различные события KeyUp, KeyDown, TextInput?

И используете ли вы JQuery мобильный или обычный?

+0

Я использую JQuery нормально. Я могу захватить события штрих-кодов как «входные» события в текстовых полях, но не на теле. –

+0

У меня есть 2 сканера на моем столе (2d/штрих-код и кредитная карта), разрабатывая пару страниц для киоска. Ваш код работает для обоих из них на моем win7 + chrome. Я попробовал document.addEventListener («tap», function (e) {alert (e)}); на моем SG s5 - работает нормально. События клавиатуры Android (document.addEventListener («keydown», ...)) также захватываются, хотя я подписался на документ. Я бы попытался подключить Bluetooth-клавиатуру, чтобы проверить, можете ли вы ее захватить, поэтому это означает, что сканер работает не как клавиатура. – faster

+0

Сканер работает как клавиатура, только если поле ввода имеет фокус. –

0

Изменение набора ключей и использование суффикса \ n для Android4.4. Он не работает на Android 6.0.1. Тестирование на Dolphin CT50 ...

+0

Я получу 2 Dolphin 75e с Android 6.0 в течение 10 дней, поэтому я расскажу вам, работает оно или нет. –

+0

Наше устройство с Android 6.0 имеет номер: 71.01.04.0015. http://hsm.force.com/publickb/articles/HSM_Article/CT50-Android-6-0-does-not-jump-to-next-field-in-web-browser-after-scanning-a- barcode /? q = ct50 + wedge & l = en_US & fs = Search & pn = 1 Я не нашел версию 71.01.07.0050 на сайте Honeywell – HoneywellCT50

-1

Honeywell имеет исправление этого вопроса понадобится этот файл я думаю: HELSINKIAD_71.01.07.0050

спросить, после того, как Honeywell обновить его через режим восстановления ..

+1

Вместо того, чтобы писать несколько ответов, вы можете отредактировать свой оригинальный ответ. – Aloso