2011-12-17 13 views
3

ZXingライブラリを使用して以下のようにバーコードをスキャンしようとしています。 Barcode Image http://i.minus.com/ih2b9lavDxOSP.pngZXing:UPC + 5でスキャンするバーコード補足

// start scanning 
Intent intent = new Intent("com.google.zxing.client.android.SCAN"); 
intent.putExtra("SCAN_MODE", "ONE_D_MODE"); 
startActivityForResult(intent, REQUEST_CODE); 

私は"TWO_D_MODE""ONE_D_MODE"を交換した場合、アプリが正常に両方のバーコードを検出することができます。 resultの値は変更されません(まだ051488005995)。

// onActivityResult 
if(requestCode == REQUEST_CODE && resultCode == RESULT_OK) 
    String result = intent.getStringExtra("SCAN_RESULT"); 

バーコード値051488005995と50115の両方を取得する方法はありますか?

補足+5バーコード(50115)を取得せずにバーコード上ISBN(0142501158)を得る他の方法はまた、素晴らしいだろう。

ありがとうございました。

答えて

0

は、私の知る限りでは、これは意図経由zxingを使用できません。

しかし、あなたは(あなたのコードのディレクトリにZXingソースを追加することで)直接あなたのコード内でZXingを埋め込むことができます。その後、com.google.zxing.MultipleBarcodeReaderを使用することができます。関数decodeMultiple()は、さらに処理できるバーコードの配列を返します。


小さな例:

// data: YUV camera preview; width/height: preview size 
Result[] decode(byte[] data, int width, int height) { 
    PlanarYUVLuminanceSource source = new PlanarYUVLuminanceSource(data, width, height, 0, 0, width, height); 
    BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); 
    MultipleBarcodeReader reader = new MultipleBarcodeReader(new MultiFormatOneDReader(null)); 
    return reader.decodeMultiple(bitmap); 
} 
+0

はいいですねました。私はそれが私のアプリのために働くかどうか確認します。ありがとう:) –

+1

あなたは最も確かにIntentによってライブラリを使用できます:http://code.google.com/p/zxing/wiki/ScanningViaIntent。しかし私は、この方法で+5のバーコードに含まれる「生の」補足情報を返すよう書いたとは思わない。ソースを直接使う必要がありますが、 'MultipleBarcodeReader'は動作しません。 –

+0

@SeanOwenそれを調べてください。 RDD全体をデータベースに格納するバッチステートメントを準備するにはどうすればよいですか。 'http:// stackoverflow.com/questions/37462803/prepare-batch-statement-to-store-all-the-rdd-to-mysql-generated-spark-strea' – Naresh

2

ONE_D_MODEはあなたのために動作します。おそらく、実際にはPRODUCT_MODEが必要です。 TWO_D_MODEのようなものはありません。これを設定することで、すべてのデフォルトフォーマットをスキャンするだけです。

両方のバーコードをスキャンしていません。製品コードをスキャンするだけです。だから私はあなたが製品コードを得ることについて何を意味するのか分からない:それはあなたがすでに持っているものだ。私は両方が欲しいと思います。

MultipleBarcodeReaderはかなりそれ自体でUPC/EANサプリメントのためのライブラリ・スキャンの無い一部として、このような状況のためではありません。 UPCおよびEANコードの拡張としてスキャンされます。

すでにUPCEANExtensionSupportに拡張バーコードのいくつかのタイプをスキャンします。生の値を返すのではなく、メタデータを解析して結果メタデータに戻します。それがあなたが本当に望むものなら、すでにこれをしています。それ以外の場合は、コードを変更する必要があります。それはUPC/EANコードを読み取るが、延長コードを見つけることができない場合

、それはスキャンを失敗することはありません、とだけプライマリーコードを返します。両方が見つかった場合にのみ返すようにしたい場合は、再度コアライブラリのコピーを変更する必要があります。

+0

あなたは私に例を与えてくれますか? 'UPCEANExtensionSupport'の使い方についてのリンク?この質問を投稿する前に、私は 'UPCEANReader'の例を探していましたが、役に立たないことも何も見つかりませんでした。あなたの助けに本当にありがとう! (まだZXingを直接使う方法を試しています...) –

+0

実際にソースコードを見ましたか?このクラスの使用法を検索するだけで、かなりわかります。 –

+0

ええ、それはどういう仕組みか分かりません...たとえば、 'DecodeHandler'で' MultiFormatReader'ではなく 'MultiFormatUPCEANReader'を使用していますか? –

1

FYIインテント/ zxingでUPC 12 + 5コードをスキャンできます。唯一のキャッチは+5を強制しなければならないということです。通常のバーコードはスキャンできません。@srowenと私のスレッドから

:IntentIntegrator => initiateScan(私は後でこれはオプションにするためにオーバーライドされたメソッドを作成する必要があります)の内側に、意図に余分なヒントを渡さ https://github.com/zxing/zxing/issues/217#issuecomment-54818496

:私のスキャン結果に

DecodeHintManager﹕ Hints from the Intent: {ALLOWED_EAN_EXTENSIONS=[[email protected]} 

取り出される拡張値:私はそれは私のアンドロイドlogcatから認識された確認

// Force 5 digit extension 
intentScan.putExtra("ALLOWED_EAN_EXTENSIONS", new int[] {5}); 
String extension = intent.getStringExtra("SCAN_RESULT_UPC_EAN_EXTENSION"); 

は今、私はいくつかのUPC 12 + 5 :)

Content:079808007955, Format:UPC_A, Extension: 74700 
関連する問題