【发布时间】:2019-03-15 07:40:15
【问题描述】:
所以我运行了 zxing 条形码扫描仪,并且在我的主要活动中,我有 onResultActivity 函数告诉我的活动推送到具有来自扫描仪的结果的新活动。
问题是我的扫描仪只是扫描任何旧的二维码,不管它是什么。 我需要扫描仪只接受我的二维码来传递成功的结果并忽略所有其他二维码(这应该通过烤面包机说“二维码不正确,再试一次”)。
这是我目前拥有的:
MainActivity
...
static final int SCAN_RESULT = 1; // The request code
...
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Check which request we're responding to
if (requestCode == SCAN_RESULT) {
// Make sure the request was successful
if (resultCode == RESULT_OK) {
// Action to take if result successful
Intent intent = new Intent(this, ResultActivity.class);
startActivity(intent);
}
}
}
ScannerActivity
...
public class ScanBarcodeActivity extends AppCompatActivity {
Button mBtnClose;
private CaptureManager capture;
private DecoratedBarcodeView barcodeScannerView;
private ViewfinderView viewfinderView;
private void initViews() {
mBtnClose = findViewById(R.id.barcode_header_close);
barcodeScannerView = findViewById(R.id.zxing_barcode_scanner);
viewfinderView = findViewById(R.id.zxing_viewfinder_view);
}
private void initListener() {
mBtnClose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_barcode);
initViews();
initListener();
capture = new CaptureManager(this, barcodeScannerView);
capture.initializeFromIntent(getIntent(), savedInstanceState);
capture.decode();
changeMaskColor(null);
}
@Override
protected void onResume() {
super.onResume();
capture.onResume();
}
@Override
protected void onPause() {
super.onPause();
capture.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
capture.onDestroy();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
capture.onSaveInstanceState(outState);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
return barcodeScannerView.onKeyDown(keyCode, event) || super.onKeyDown(keyCode, event);
}
public void changeMaskColor(View view) {
}
}
编辑:我已经尝试过了,但它显然不起作用,这基本上就是我想要开始的工作。如果 SCAN_RESULT = QR_CODE 则转到下一个活动,否则会弹出一条消息说重试。
static final int SCAN_RESULT = 1; // The request code
String QR_CODE = "EC0111-1234567899";
int RESULT = Integer.parseInt(QR_CODE);
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Check which request we're responding to
if (requestCode == SCAN_RESULT) {
// Make sure the request was successful
if (SCAN_RESULT == RESULT) {
Intent intent = new Intent(this, ResultActivity.class);
startActivity(intent);
} else {
Toast.makeText(this, "Incorrect QR code, please try again", Toast.LENGTH_LONG).show();
}
}
}
【问题讨论】:
-
当除您的 QR 码之外的所有内容都应该是“正确的”时,应用程序需要在扫描之前知道您的 QR 码的内容,以便对其进行检查...所以...为什么要使用 QR如果应用已经知道内容是什么,则编写代码?
-
我需要扫描仪只接受我的二维码以传递成功结果并忽略所有其他二维码 - 二维码是通用的,没有“我的二维码” .您可以做的是在 QR 码本身中存储“特殊”数据,以便您的应用程序可以对其进行解码并检查所述数据是否符合“您的 QR 码”结构。
-
我知道二维码是通用的,所以我为二维码生成了一个唯一的代码。我只需要知道如何设置扫描仪来注册该唯一代码。目前扫描任何二维码都会直接进入我的结果屏幕,这并不理想。我需要在通过结果之前对其进行检查。例如,onActivityResult 需要进行 if else 检查,如何为我的 QR 创建的唯一代码为该语句创建异常?
标签: java android qr-code zxing