【问题标题】:How to tell zxing to only read my QR code and ignore all others?如何让 zxing 只读取我的二维码而忽略其他二维码?
【发布时间】: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


【解决方案1】:

您可以尝试一些方法。

  1. 加密信息:您可以对二维码中编码的信息进行加密,使其他人无法读取,同时您也可以识别自己的二维码。这样做

    • 使用密钥加密信息
    • 使用加密信息生成二维码
    • 读取并尝试解密信息。如果你能解密,那就是你的二维码。
  2. 开发你自己的二维码:这对你来说可能很昂贵,但是生成你自己风格的二维码,比如 facebook messenger、snapchat 和 whatsapp 等是个好主意。在这种情况下,你不能使用标准 ZXING 库。您必须自定义 ZXING 库或开发一个新库。

  3. 为信息添加标签:您可以在您的二维码信息中添加一个唯一的标签(文本)。您可以通过它识别您的二维码。

【讨论】:

  • 感谢您提供的信息,但我并不想创建二维码,因为我已经这样做了。我正在研究如何在扫描完成时使用该 QR 作为通行证。 QR基本上需要扫描后if else的成功关键,否则它应该重试扫描。
  • 您可以在您的二维码信息中添加一个唯一的标签(文本)。您可以通过它识别您的二维码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多