OS 6中的黑莓QR码解码概率

时间:2012-02-14 12:26:26

标签: blackberry barcode-scanner zxing

我使用以下代码进行2D-QR码解码。

package com.test.rim;

import java.util.*;

import net.rim.device.api.barcodelib.*;
import net.rim.device.api.ui.*;
import net.rim.device.api.ui.container.*;
import net.rim.device.api.ui.UiApplication;

import net.rim.device.api.ui.component.Dialog;

import com.google.zxing.*;

final class BarcodeScanScreen extends MainScreen{

    BarcodeScanScreen barcodeScanScreen;

    BarcodeScanScreen(){

        BarcodeDecoderListener listener = new BarcodeDecoderListener(){

            public void barcodeDecoded( String rawText )
            {
                Dialog.alert(rawText);
            }
        };

        Hashtable hints = new Hashtable(1);
        Vector formats  = new Vector(1);
        formats.addElement(BarcodeFormat.QR_CODE);
        hints.put(DecodeHintType.POSSIBLE_FORMATS, formats);

        BarcodeDecoder decoder = new BarcodeDecoder( hints );

        try{
            BarcodeScanner scanner = new BarcodeScanner( decoder, listener );
            scanner.getVideoControl().setDisplayFullScreen( true );
            add( scanner.getViewfinder() );
            scanner.startScan();
        }catch (Exception e)
        {
            // Catch errors here
            Dialog.alert("Error:" + e.getMessage());
        }
    }
}

要启动此屏幕,我会在上一屏幕的按钮上触发代码app.pushScreen(new BarcodeScanScreen());

当我运行代码时,BarcodeScanScreen正常启动并且扫描也在继续(因为设备的红灯闪烁)。一旦我将凸轮放在任何有效的2D-QR代码之前,闪烁就会停止。我认为这意味着,任何条形码都能成功解码,因此扫描仪会停止。但是barcodeDecoded()方法没有被触发,因为屏幕上没有出现警报按摩。我的代码有什么问题?

3 个答案:

答案 0 :(得分:1)

我在barcodeDecoded()中使用此代码,它解决了我的问题。

app.invokeLater(new Runnable() {
                    public void run() {
                      try { javax.microedition.media.Manager.playTone(ToneControl.C4, 1000, 100);} catch (MediaException e) { } 
                      app.popScreen(_barcodeScreen);
                      showDecoded(rawText);
                }
            });
            _barcodeScreen.invalidate();

答案 1 :(得分:0)

您的代码看起来很好,所以我唯一能想到的是Dialog.alert无法成功运行,因为您的BarcodeScanScreen无法在其上显示模式对话框 - 视频预览窗口不能有覆盖。在显示警报之前,请尝试停止扫描仪并将视频预览屏幕弹出堆栈。

答案 2 :(得分:0)

问题是您在 BarcodeDecoderListener 中获取数据后没有停止扫描;

首先看一下黑莓样本名称提供的示例代码 BarcodeDemo ;

在您的代码中,而不是执行此操作:

BarcodeDecoderListener listener = new BarcodeDecoderListener()
{
    public void barcodeDecoded( String rawText )
    {
         Dialog.alert(rawText);
    }
};

这样做:

BarcodeDecoderListener listener =new BarcodeDecoderListener() 
{
public void barcodeDecoded(String rawText) 
{
    try 
    {           
        barcodeScanner.stopScan();
         Dialog.alert(rawText);
    } 
    catch (Exception e) 
    {
        //Catch the Exception
    }                   
}
};