Java 如何限制Zebra TC520K触摸式计算机扫描仪仅扫描9位条形码?

Java 如何限制Zebra TC520K触摸式计算机扫描仪仅扫描9位条形码?,java,android,barcode-scanner,motorola-emdk,Java,Android,Barcode Scanner,Motorola Emdk,我有一个问题,当扫描条码与斑马TC520K触摸电脑条码扫描仪。在我的例子中,有几个条形码打印在一起。但这只是我感兴趣扫描的条形码之一。问题是,如果我瞄准的方向不对,扫描仪就会在我感兴趣的条形码旁边扫描错误的条形码。我要扫描的特定条形码是一种特定值格式,该格式是由9位数字(0-9)组成的值。例如:“123456789”或“012301231”。Android Java EMDK中是否有内置的功能、方法或属性可用于过滤我感兴趣的特定条形码?我该怎么做 我看到有一个选择不同解码器的选项,但我认为这不够

我有一个问题,当扫描条码与斑马TC520K触摸电脑条码扫描仪。在我的例子中,有几个条形码打印在一起。但这只是我感兴趣扫描的条形码之一。问题是,如果我瞄准的方向不对,扫描仪就会在我感兴趣的条形码旁边扫描错误的条形码。我要扫描的特定条形码是一种特定值格式,该格式是由9位数字(0-9)组成的值。例如:“123456789”或“012301231”。Android Java EMDK中是否有内置的功能、方法或属性可用于过滤我感兴趣的特定条形码?我该怎么做

我看到有一个选择不同解码器的选项,但我认为这不够具体,不能只针对值为9位的条形码

谢谢

更新: 我试着用
length1
length2
将解码器
code128
设置为长度9。但条形码扫描器仍然扫描所有条形码,而不仅仅是长度为9位的条形码。以下是我如何初始化扫描仪并设置扫描仪配置:

// Method to initialize and enable Scanner and its listeners
    public void initializeScanner() throws ScannerException {
        if (scanner == null) {
            // Get the Barcode Manager object
            barcodeManager = (BarcodeManager) this.emdkManager
                    .getInstance(EMDKManager.FEATURE_TYPE.BARCODE);
            // Get default scanner defined on the device
            scanner = barcodeManager.getDevice(BarcodeManager.DeviceIdentifier.DEFAULT);
            // Add data and status listeners
            scanner.addDataListener(this);
            scanner.addStatusListener(this);
            // Hard trigger. When this mode is set, the user has to manually
            // press the trigger on the device after issuing the read call.
            // scanner.triggerType = Scanner.TriggerType.HARD;
            scanner.triggerType = Scanner.TriggerType.SOFT_ALWAYS;

            // Enable the scanner
            scanner.enable();

            // Scan Mode set to Multi Barcode
            ScannerConfig sc = scanner.getConfig();
            sc.readerParams.readerSpecific.imagerSpecific.scanMode = ScannerConfig.ScanMode.SINGLE_BARCODE;
            sc.decoderParams.code128.length1 = 9;
            sc.decoderParams.code128.length2 = 9;
            sc.readerParams.readerSpecific.imagerSpecific.beamTimer = 0;
            sc.readerParams.readerSpecific.imagerSpecific.aimTimer = 0;
            scanner.setConfig(sc);

            // Starts an asynchronous Scan. The method will not turn ON the
            // scanner. It will, however, put the scanner in a state in which
            // the scanner can be turned ON either by pressing a hardware
            // trigger or can be turned ON automatically.
            try {

                    scanner.addDataListener(this);

                    // Scan Mode set to Multi Barcode
                    //ScannerConfig sc = scanner.getConfig();
                    sc.readerParams.readerSpecific.imagerSpecific.scanMode = ScannerConfig.ScanMode.SINGLE_BARCODE;
                    // Thread.sleep(100);
                    sc.decoderParams.code128.length1 = 9;
                    sc.decoderParams.code128.length2 = 9;
                    sc.readerParams.readerSpecific.imagerSpecific.beamTimer = 0;
                    sc.readerParams.readerSpecific.imagerSpecific.aimTimer = 0;
                    // Thread.sleep(100);
                    scanner.setConfig(sc);

                    // scanner.read();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

我必须禁用所有其他解码器才能工作吗?我是否只需要启用
code128
解码器,还是有什么问题?

是的,这可以使用EMDK按符号进行。在下,选择解码器,例如代码128,并将and设置为相同的值,在您的案例9中。

您使用的解码设备上的哪个扫描仪/成像仪-后摄像头或带瞄准灯的扫描仪?是否可以使用瞄准功能,嗨,请检查问题中我的更新。谢谢你的帮助。我试过了,但没有成功。可能我做错了什么。我想问题是当扫描仪空闲时,您没有设置解码器,请参阅,因为应用设置时扫描仪需要处于特定状态。也有可能条形码被扫描为更宽松的符号,如I2of5,您可以在onData()中调用getLabelType()以查看实际解码的符号。