3

我正在开发一个必须在运行 Android 4.4 的 Honeywell Dolphin 75e 设备上使用的 Web 应用程序。集成条码阅读器可以在“键盘楔”模式下运行,但仅限于文本字段具有焦点时。

使用桌面浏览器,我可以使用该代码来捕获条形码阅读器事件:

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 允许我捕获这些事件?或者其他处理这个的浏览器?

编辑:

我能够使用文本字段作为缓冲区来拦截条形码阅读器的事件。

但在这种情况下,我不能在我的应用程序中使用任何需要焦点的控件。这是一个很大的障碍。

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

4 回答 4

7

我终于收到了霍尼韦尔支持的功能性回复:

我怀疑应用程序希望将数据作为 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

截屏

由于手动操作可能需要 15 分钟,因此我创建了此代码,您可以在 Wedge as keys 字段中阅读该代码:

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 秒再保存,并通过退出并重新输入扫描仪设置检查数据是否正确保存到该字段中。

最后,禁用并重新启用扫描仪(或重新启动设备)。

然后扫描仪应该在您的应用程序上工作。

希望这可以帮助。

终端必须使用最新版本的系统才能看到“Wedge as keys”字段。不要忘记将“\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);
});

我希望这对其他人有帮助。

于 2016-03-10T11:49:40.540 回答
1

您是否尝试订阅不同的元素 $('html,body') 以及可能不同的事件 keyup、keydown、textInput?

您使用的是 JQuery 移动版还是普通版?

于 2016-02-22T00:54:33.577 回答
0

更改键集和使用 \n 后缀适用于 Android4.4。它不适用于 Android 6.0.1。在 Dolphin CT50 上进行测试...

于 2017-03-08T09:56:49.193 回答
-1

霍尼韦尔已经解决了这个问题,我认为你需要这个文件:HELSINKIAD_71.01.07.0050

问霍尼韦尔,之后你通过恢复模式更新它..

于 2017-03-27T21:23:16.407 回答