1

I am trying to integrate Google Vision API in my code but having hard time converting value in to text view. Also the camera surface view doesn't get destroyed.

Manifest Meta-data -

<meta-data
        android:name="com.google.android.gms.vision.DEPENDENCIES"
        android:value="barcode" />

Current Value readed by below code:

com.google.android.gms.vision.barcode.Barcode@eeb8638

Expected Barcode Text : 047754732276

Code:

barcodeDetector =
                new BarcodeDetector.Builder(transactionActivity)
                        .setBarcodeFormats(Barcode.ALL_FORMATS)
                        .build();
        cameraSource = new CameraSource.Builder(transactionActivity, barcodeDetector)
                .setAutoFocusEnabled(true)
                .setRequestedPreviewSize(1600, 1024)
                .build();

        cameraView.getHolder().addCallback(new SurfaceHolder.Callback() {
            @Override
            public void surfaceCreated(SurfaceHolder holder) {
                try {
                    //noinspection MissingPermission
                    if(ContextCompat.checkSelfPermission(transactionActivity, android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED){
                        ActivityCompat.requestPermissions(transactionActivity, new String[]{Manifest.permission.CAMERA}, PERMISSION_REQUEST);
                    }
                    cameraSource.start(cameraView.getHolder());
                } catch (IOException ex) {
                    ex.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() {
            @Override
            public void release() {
            }

            @Override
            public void receiveDetections(Detector.Detections detections) {
                final SparseArray barcodes = detections.getDetectedItems();
                if (barcodes.size() != 0) {
                    imei.post(new Runnable() {
                        @Override
                        public void run() {
                            cameraSource.stop();
                            //Update barcode value to TextView
                            imei.setText(String.valueOf((barcodes.valueAt(0).displayValue)));
                        }
                    });
                }
            }
        });
Akshay
  • 657
  • 2
  • 19
  • 38

1 Answers1

0

Finally found answer, we need to cast SparseArray with SparseArray <Barcode> to get displayValue.

Below is updated code..

barcodeDetector =
            new BarcodeDetector.Builder(transactionActivity)
                    .setBarcodeFormats(Barcode.ALL_FORMATS)
                    .build();
    cameraSource = new CameraSource.Builder(transactionActivity, barcodeDetector)
            .setAutoFocusEnabled(true)
            .setRequestedPreviewSize(1600, 1024)
            .build();

    cameraView.getHolder().addCallback(new SurfaceHolder.Callback() {
        @Override
        public void surfaceCreated(SurfaceHolder holder) {
            try {
                //noinspection MissingPermission
                if(ContextCompat.checkSelfPermission(transactionActivity, android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED){
                    ActivityCompat.requestPermissions(transactionActivity, new String[]{Manifest.permission.CAMERA}, PERMISSION_REQUEST);
                }
                cameraSource.start(cameraView.getHolder());
            } catch (IOException ex) {
                ex.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() {
        @Override
        public void release() {
        }

        @Override
        public void receiveDetections(Detector.Detections detections) {
            final SparseArray<Barcode> barcodes = detections.getDetectedItems();
            if (barcodes.size() != 0) {
                imei.post(new Runnable() {
                    @Override
                    public void run() {
                        cameraSource.stop();
                        //Update barcode value to TextView
                        imei.setText(String.valueOf((barcodes.valueAt(0).displayValue)));
                    }
                });
            }
        }
    });
Akshay
  • 657
  • 2
  • 19
  • 38