如何将扫描的实际条形码传递给ImageView

时间:2018-01-04 12:35:00

标签: android barcode google-vision

我的应用中有一项活动要么从图库中选择图像以扫描条形码,然后在TextView中显示结果并在{ {1}} 启动相机扫描一个并在相应的ImageView中显示结果。

我使用Google Mobile Vision API(间接通过Library跳过锅炉铭牌代码)并且扫描效果非常快。

在通过搜索图书馆和Google移动视觉API以及互联网的示例项目但未能找到问题之前,我已经尽力找到方法。

如何将实际扫描的条形码传递给TextView(或活动)? (似乎不可能直接)

我的代码基本上是这个(只是有一些意图等)

ImageView

以上代码效果很好但有没有办法使用@Override public void onRetrieved(final Barcode barcode) { Log.d(TAG, "Barcode read: " + barcode.displayValue); runOnUiThread(new Runnable() { @Override public void run() { AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this) .setTitle("code retrieved") .setMessage(barcode.displayValue); builder.show(); } }); } // for multiple callback @Override public void onRetrievedMultiple(final Barcode closetToClick, final List<BarcodeGraphic> barcodeGraphics) { runOnUiThread(new Runnable() { @Override public void run() { String message = "Code selected : " + closetToClick.displayValue + "\n\nother " + "codes in frame include : \n"; for (int index = 0; index < barcodeGraphics.size(); index++) { Barcode barcode = barcodeGraphics.get(index).getBarcode(); message += (index + 1) + ". " + barcode.displayValue + "\n"; } AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this) .setTitle("code retrieved") .setMessage(message); builder.show(); } }); } @Override public void onBitmapScanned(SparseArray<Barcode> sparseArray) { for (int i = 0; i < sparseArray.size(); i++) { Barcode barcode = sparseArray.valueAt(i); Log.e("value", barcode.displayValue); } } @Override public void onRetrievedFailed(String reason) { // in case of failure } } 获取实际扫描的条形码?

1 个答案:

答案 0 :(得分:0)

您可以使用ZXing库从条形码值生成Bitmap。 添加gradle依赖项:

implementation 'com.google.zxing:core:3.2.1'
implementation 'com.journeyapps:zxing-android-embedded:3.2.0@aar'

然后使用下一个代码:

public void generateBarcode(Barcode barcode) {

    MultiFormatWriter multiFormatWriter = new MultiFormatWriter();

    String barcodeNumber = barcode.displayValue;
    try {
        BitMatrix bitMatrix = multiFormatWriter.encode(barcodeNumber, BarcodeFormat.UPC_A, 200, 200);
        BarcodeEncoder barcodeEncoder = new BarcodeEncoder();
        Bitmap bitmap = barcodeEncoder.createBitmap(bitMatrix);

        imageView.setImageBitmap(bitmap);
    } catch (WriterException e) {
        e.printStackTrace();
    }
}