Phonegap条形码可以更快地扫描

时间:2013-02-19 21:51:53

标签: cordova barcode

这是我的代码(并且它正常工作):

document.addEventListener('deviceready', myDeviceReady, false);
function myDeviceReady() {
    $('#Print').append('Device is ready');
    function Scan() {
        try {
            $('#Print').append('Scanning')
            window.plugins.barcodeScanner.scan(mySuccess,myError);
        } catch (myCatch) {
            $('#Print').append('catch: ' + myCatch)
            Scan();
        }   
    }
    function mySuccess(result) {
        if (result.cancelled) {
            $('#Print').append('The user cancelled the scan.')
        } else {
            $('#Print').append(result.text);
            $('#Print').append(result.format);
        }
        Scan();
    }

    function myError(error) {
        $('#Print').append('Scanning failed: ' + error);
        Scan();
    }
    Scan();
}
问:有没有办法更快地轮询扫描仪?每次扫描都需要几秒钟,我的用户有大量的条形码可供扫描。

他们曾经用楔子扫描到笔记本电脑,但他们现在想要使用iPad。

编辑:

也许我正在寻找的是第三方解决方案。

3 个答案:

答案 0 :(得分:2)

除非你的HTML很大(通过$('#Print')获取DOM节点可能需要一些时间),或者你正在运行应用程序很长时间(在这种情况下.append可能会变慢,因为它永远不会被清除),你的JavaScript代码没有任何问题。事实上,我假设延迟来自你的条形码插件,而不是你的JavaScript处理程序。

在做任何其他事情之前,你应该检查我的假设是否正确,并且延迟实际发生在.barcodeScanner.scan()调用和mySuccess()/ myFailure()函数之间。

PhoneGap似乎正在使用ZXing("Zebra Crossing"),这是一个既定的标准。如果这还不够快,您可能想尝试其他库:

但可能是移动相机中自动对焦的速度不足以满足您的要求,而且您需要基于激光的硬件。 This link有许多与硬件接口的产品。

答案 1 :(得分:2)

如果您使用的是cordova http://ngcordova.com/docs/plugins/barcodeScanner/

中的官方插件

你可以让iOS更快,

在您的XCode项目中,转到plugins文件夹,然后打开CDVBarcodeScanner.mm

更改此行:

captureSession.sessionPreset = AVCaptureSessionPresetHigh;

有:

captureSession.sessionPreset = AVCaptureSessionPresetMedium;

答案 2 :(得分:1)

在以前的工作中,我曾经为条形码扫描仪制造商CipherLab工作。

关于条形码扫描仪

首先,您需要澄清扫描仪本身不是很慢,而是应用程序读取它。扫描仪性能本身在某种程度上是价格的函数。如果你有一个便宜的扫描仪,它可能会更慢,花钱在一个漂亮的扫描仪将提高性能和适应性(读取损坏/污迹/脏条形码的能力)。仅供参考,大多数移动扫描仪没有像@Hazzit建议的“自动对焦”,但有一个固定的预聚焦镜头,针对特定的距离范围进行了优化。如果它是成像扫描仪(不是激光)点,条形码处的扫描仪确实关闭并将其拉回,直到扫描仪读取为止。如果最终用户正在扫描大量条形码,他们将很快记住“最佳点”。激光扫描仪只能读取一维条码,但可能更快,能够从更远的距离拾取。

关于您的JS代码

扫描仪插件似乎同步执行(阻止JS直到获得条形码)。该库中是否有其他功能可以异步使用扫描仪?如果没有,请考虑查看其他SDK,看看是否有其他人允许异步使用条形码扫描器。

可能有些小,但我会尝试将您的DOM操作JS与扫描程序代码分开。 DOM操作可能很慢,具体取决于DOM结构,选择器和您正在做的事情。

如果您可以异步访问扫描程序,您可以解除这些并在可能的情况下执行所有DOM操作,如果扫描程序在等待下一个条形码时没有阻塞(基本上是在您启动之后的UI更新)扫描仪接受下一个条形码。)

关于键盘楔形扫描

现在键盘楔形扫描仪显然可以快速输入数据,无论应用程序是否已准备就绪,或者能够跟上按键。这将很快,但缺乏应用程序级别控制。

你可以使用蓝牙条码扫描器作为HID设备(在现代技术中基本上是“键盘楔”),它将完全按照上面提到的方式工作。快速,仍然缺乏硬件的应用程序级别控制。

当然,许多蓝牙库也支持SPP串口蓝牙配置文件,它可以为您提供应用程序级控制。您可以发送扫描仪命令/配置,然后读回扫描数据。

这是您的SDK工具发挥作用的地方。它们只是读取/写入蓝牙串行端口(扫描仪)以轮询扫描的条形码。这可能非常快,但取决于SDK的质量。我不是iOS程序员,对该特定平台一无所知,但我知道在windows中他们是访问串口的高级方法和性能更高的低级方法。

无论如何,如果你想要的话,你仍然可以选择回到键盘楔形的方式!我以为我会指出这一点。

此键盘楔形模式中,通常使用快捷键为扫描仪数据添加前缀。大多数扫描仪可以在扫描数据的开头或结尾插入一些额外的击键。例如,您可以将扫描仪配置为键入F3+{barcode data}+Enter并让您的页面监视该快捷方式,将焦点移至正确的输入框,然后接受数据。

如果一切都失败

如果所有其他方法都失败了,你就无法获得所需的性能......唯一的方法就是为iOS编写本机应用程序。虽然高级工具很棒,但无论如何(无论是硬件访问还是UI性能),您都无法获得本机应用程序的性能。