2012-02-14 97 views
0

我正在使用下面的代碼爲2D-QR碼解碼器。黑莓QR碼解碼概率在操作系統6

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()方法沒有被觸發,因爲沒有任何警報消息出現在屏幕上。我的代碼中有什麼問題?

+0

您是否測試過黑莓樣本提供的示例代碼?首先測試Blackberry Samples提供的BarcodeDemo;當您在BarcodeListener中找到數據時,您不會停止掃描; – alishaik786 2012-02-15 06:23:59

回答

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(); 
+0

也可以使用: app.invokeLater(new Runnable(){ public void run(){try {javax.microedition.media.Manager.playTone(ToneControl.C4,1000,100);} catch(MediaException e) {} app.popScreen(_barcodeScreen); _barcodeScreen.invalidate(); showDecoded(rawText); } }); – AnkitRox 2012-09-28 13:20:04

0

您的代碼看起來很好,所以我能想到的唯一的事情就是Dialog.alert未成功運行,因爲你的BarcodeScanScreen無法顯示在它上面的一個模式對話框 - 視頻預覽窗口不能有重疊。嘗試停止掃描儀並在顯示警報之前將視頻預覽屏幕彈出堆棧。

+0

我嘗試通過此代碼發出聲音:try {javax.microedition.media.Manager.playTone(ToneControl.C4,1000,100);} catch(MediaException e){}}但沒有聲音。 – 2012-02-14 14:16:43

+0

您是否嘗試過在'barcodeDecoded'上放置一個斷點,然後運行調試程序以查看它是否實際被調用? – donturner 2012-02-14 14:20:24

+0

dev_android,使用** Alert.startAudio(new short [] {1046,200},100); **創建嘟嘟聲。 – AnkitRox 2012-09-28 13:16:32

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 
    }     
} 
};