Сканирование QR-кода остановилось внезапно и не сканирует другой QR-код, но камера работает - PullRequest
0 голосов
/ 04 октября 2019

Я разработал приложение qrscanning для Android в качестве бизнес-приложения. Я использовал API Google Vision для этой операции. Сканирование QRCode работает нормально. внезапно перестал читать qrcode, но камера работала. Как найти, в чем проблема и как ее устранить?

Подробно:

Предположим, есть 100 ящиков, каждый из которых имеет свой код qr (сканирование выполняется через мобильный телефон на 100 ячеек). клиент сканировал каждый qrcode и сохранял данные. Но в среднем во время сканирования камера перестала считывать qrcode (скажем, из 100 было выполнено сканирование 50 ящиков)

Я закодировал, как это:

public void doScanning( boolean autoFocus, boolean isFlashLightOn)
    {
        try {
            barcodeDetector = new BarcodeDetector.Builder(getApplicationContext())
                    .setBarcodeFormats(Barcode.QR_CODE | Barcode.DATA_MATRIX)
                    .build();
            barcodeDetector.setFocus(1);

            builder = new CameraSource.Builder(getApplicationContext(), barcodeDetector)
                    .setFacing(CameraSource.CAMERA_FACING_BACK)
                    .setRequestedFps(15.0f)
                    .setRequestedPreviewSize(1600, 1024);


            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
                builder = builder.setFocusMode(
                        autoFocus ? Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE : null);
            }

            cameraSource = builder.setFlashMode(isFlashLightOn ? Camera.Parameters.FLASH_MODE_TORCH : null).build();

            cameraView.getHolder().addCallback(new SurfaceHolder.Callback() {
                @Override
                public void surfaceCreated(SurfaceHolder holder) {

                    try {
                        if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {

                            return;
                        }
                        cameraSource.start(cameraView.getHolder());
                    } catch (IOException ie) {
                        ie.printStackTrace();
                    }
                }

                @Override
                public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
                }

                @Override
                public void surfaceDestroyed(SurfaceHolder holder) {
                    cameraSource.stop();
                }
            });

            barcodeDetector.setProcessor(new Detector.Processor<Barcode>() {
                @Override
                public void release() {

                }

                @Override
                public void receiveDetections(final Detector.Detections<Barcode> detections) {
                    if (detections.getDetectedItems().size() != 0) {
                        scannedResult.post(new Runnable() {
                            @Override
                            public void run() {
                               scannedResult.setText(detections.getDetectedItems().valueAt(0).displayValue);
                                    addData(detections.getDetectedItems().valueAt(0).displayValue);

                            }
                        });
                    }
                }
            });
        }catch(Exception e)
        {
            Toast.makeText(getApplicationContext(), "L381 CAMERA NOT WORKING", LENGTH_SHORT).show();
        }
    }
...