android - 如何从 Newland MT90 读取多个条码?
问题描述
我有一个 Newland MT90 条码阅读器 android 手机。我正在创建一个要扫描两个条形码的应用程序。当我运行我的代码并且我第一次按下任何按钮时,它工作正常。同时,当我按下另一个按钮时,它正在替换两个 TextView 中的条形码。我该如何解决这个问题?
btnScanUid.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
intent = new Intent("nlscan.action.SCANNER_TRIG");
intent.putExtra("SCAN_TIMEOUT", 4); // SCAN_TIMEOUT value: int, 1-9; unit: second
intent.putExtra("SCAN_TYPE ", 1); // SCAN_TYPE: read one barcodes during a scan attempt
//sendBroadcast(intent);
ReadUID(intent);
}
});
btnScanPart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent("nlscan.action.SCANNER_TRIG");
intent.putExtra("SCAN_TIMEOUT", 4); // SCAN_TIMEOUT value: int, 1-9; unit: second
intent.putExtra("SCAN_TYPE ", 1); // SCAN_TYPE: read one barcodes during a scan attempt
//sendBroadcast(intent);
ReadPart(intent);
}
});
public void ReadUID(Intent intent){
sendBroadcast(intent);
registerReceiver(new BroadcastReceiver() {
@Override public void onReceive(Context context, Intent intent) {
if (intent != null) {
barcode = intent.getStringExtra("SCAN_BARCODE1");
int barcodeType = intent.getIntExtra("SCAN_BARCODE_TYPE", -1);
if(barcode!=null) {
UidBarcode.setText(barcode);
UidBarcodeType.setText(String.valueOf(barcodeType));
String text=String.valueOf(barcodeType); // Whatever you need to encode in the QR code
MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
try {
BitMatrix bitMatrix = multiFormatWriter.encode(text, BarcodeFormat.QR_CODE,200,200);
BarcodeEncoder barcodeEncoder = new BarcodeEncoder();
Bitmap bitmap = barcodeEncoder.createBitmap(bitMatrix);
UidImageView.setImageBitmap(bitmap);
} catch (WriterException e) {
e.printStackTrace();
}
}else{
Toast.makeText(getApplicationContext(), "Barcode Not getting.", Toast.LENGTH_LONG).show();
}
} else {
Toast.makeText(getApplicationContext(), "Scan Failed", Toast.LENGTH_LONG).show();
}
}
}, new IntentFilter("nlscan.action.SCANNER_RESULT"));
}
public void ReadPart(Intent intent){
sendBroadcast(intent);
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent != null) {
barcodePart = intent.getStringExtra("SCAN_BARCODE1");
int barcodeType = intent.getIntExtra("SCAN_BARCODE_TYPE", -1);
if(barcodePart!=null) {
PartBarcode.setText(barcodePart);
PartBarcodeType.setText(String.valueOf(barcodeType));
String text=String.valueOf(barcodeType); // Whatever you need to encode in the QR code
MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
try {
BitMatrix bitMatrix = multiFormatWriter.encode(text, BarcodeFormat.QR_CODE,200,200);
BarcodeEncoder barcodeEncoder = new BarcodeEncoder();
Bitmap bitmap = barcodeEncoder.createBitmap(bitMatrix);
PartImageView.setImageBitmap(bitmap);
} catch (WriterException e) {
e.printStackTrace();
}
}else{
Toast.makeText(getApplicationContext(), "Barcode Not getting.", Toast.LENGTH_LONG).show();
}
} else {
Toast.makeText(getApplicationContext(), "Scan Failed", Toast.LENGTH_LONG).show();
}
}
}, new IntentFilter("nlscan.action.SCANNER_RESULT"));
}
解决方案
假设Intent
返回相同的内容,您只需要更改Intent
发布的内容:
Intent intent = new Intent("nlscan.action.SCANNER_TRIG");
intent.putExtra("SCAN_TIMEOUT", 4); // SCAN_TIMEOUT value: int, 1-9; unit: second
intent.putExtra("SCAN_TYPE ", 1); // SCAN_TYPE: read one barcodes during a scan attempt
// passing the resId:
intent.putExtra("SCAN_TARGET_FIELD", R.id.btnScanUid);
ReadUID(intent);
然后决定.onReceive()
更新哪个字段。
推荐阅读
- python-3.x - 如何更改默认程序以在 Python 中打开文件?
- c++ - 在 c++ 中显示总和,然后添加更多 sum cpp
- docker - 如何连接到 docker 容器内的 localhost?
- javascript - 隐藏后如何取消隐藏一行?
- gnuplot - 多图中坐标系的名称是什么?
- spring - 如何在 MockMVC 中模拟一些 bean 而不是其他的?
- performance - 从 S3 复制镶木地板文件时出现 Vertica 性能问题
- xml - XSLT 将 XML 转换为管道分隔的 Txt - 将行转置为列
- php - PHP防止图像刮擦
- vsto - COM 加载项 > 正确处理对象