Как заставить zxing читать только мой QR-код и игнорировать все остальные? - PullRequest
0 голосов
/ 15 марта 2019

Итак, у меня запущен сканер штрих-кода zxing, и в основной деятельности у меня есть функция onResultActivity, которая сообщает моей активности о переходе к новой операции с результатом со сканера.

Проблема в том, что мой сканер просто сканирует любой старый QR-код, независимо от того, что это такое. Мне нужно, чтобы сканер принимал только мой QR-код, чтобы передать успешный результат, и игнорировать все другие QR-коды (это должен быть тостер, чтобы сказать «неверный QR-код, попробуйте еще раз»).

Вот что у меня сейчас есть:

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();
            }

        }
    }

1 Ответ

0 голосов
/ 15 марта 2019

Есть несколько подходов, которые вы можете попробовать.

  1. Шифрование информации: Вы можете зашифровать информацию, закодированную в QR, чтобы другие не могли ее прочитать, а также могли идентифицировать свой собственный QR. Для этого

    • Шифрование информации ключом
    • Создать QR с зашифрованной информацией
    • Прочитайте и попробуйте расшифровать информацию. Если вы можете расшифровать, чем ваш QR.
  2. Создайте свой собственный QR: Это может быть дорогостоящим для вас, но это прекрасная идея - создать свой собственный стилизованный QR, такой как Facebook Messenger, Snapchat, WhatsApp и т. Д. В этом случае вы можете ' t использовать стандартную библиотеку ZXING. Вы должны настроить библиотеку ZXING или разработать новую.

    enter image description here

  3. Добавить тег к информации: Вы можете добавить уникальный тег (текст) в вашу информацию QR. С помощью которого вы можете определить свой QR-код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...