我的应用中有一项活动要么从图库中选择图像以扫描条形码,然后在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
}
}
获取实际扫描的条形码?
答案 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();
}
}