我使用以下代码作为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正常启动,扫描也在进行(因为设备的红灯在闪烁)。只要我把摄像头放在任何有效的二维二维码前面,闪烁就会停止。我认为这意味着,任何条形码都被成功解码,因此扫描器停止。但barcodeDecoded()方法不会触发,因为屏幕上没有出现警报消息。我的代码中有什么问题?
发布于 2012-02-15 21:08:11
我在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();发布于 2012-02-14 21:27:40
你的代码看起来很好,所以我唯一能想到的就是Dialog.alert不能成功运行,因为你的BarcodeScanScreen不能在它上面显示一个模式对话框--视频预览窗口不能有覆盖。在显示警报之前,请尝试停止扫描仪并从堆栈中弹出视频预览屏幕。
发布于 2012-02-15 14:28:30
问题是,在获取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
}
}
};https://stackoverflow.com/questions/9276852
复制相似问题