How to read barcodes with the camera on Android?

前端 未结 9 1588
广开言路
广开言路 2020-12-07 19:24

I want my application to recognize barcodes taken by camera. Is it possible using Android SDK?

Something like this: Barcode Scanner

9条回答
  •  轮回少年
    2020-12-07 19:33

    Here is sample code using camera api

    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.util.SparseArray;
    import android.view.SurfaceHolder;
    import android.view.SurfaceView;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    import java.io.IOException;
    import com.google.android.gms.vision.CameraSource;
    import com.google.android.gms.vision.Detector;
    import com.google.android.gms.vision.Frame;
    import com.google.android.gms.vision.barcode.Barcode;
    import com.google.android.gms.vision.barcode.BarcodeDetector;
    
    public class MainActivity extends AppCompatActivity {
    
    TextView barcodeInfo;
    SurfaceView cameraView;
    CameraSource cameraSource;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        cameraView = (SurfaceView) findViewById(R.id.camera_view);
          barcodeInfo = (TextView) findViewById(R.id.txtContent);
    
    
        BarcodeDetector barcodeDetector =
                new BarcodeDetector.Builder(this)
                        .setBarcodeFormats(Barcode.CODE_128)//QR_CODE)
                        .build();
    
        cameraSource = new CameraSource
                .Builder(this, barcodeDetector)
                .setRequestedPreviewSize(640, 480)
                .build();
    
        cameraView.getHolder().addCallback(new SurfaceHolder.Callback() {
            @Override
            public void surfaceCreated(SurfaceHolder holder) {
    
                try {
                    cameraSource.start(cameraView.getHolder());
                } catch (IOException ie) {
                    Log.e("CAMERA SOURCE", ie.getMessage());
                }
            }
    
            @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) {
                    barcodeInfo.post(new Runnable() {    // Use the post method of the TextView
                        public void run() {
                            barcodeInfo.setText(    // Update the TextView
                                    barcodes.valueAt(0).displayValue
                            );
                        }
                    });
                }
            }
        });
    }
    }
    

    activity_main.xml

    
    
    
    
    
        
    
        
        

    build.gradle(Module:app)

    add compile 'com.google.android.gms:play-services:7.8.+' in dependencies

提交回复
热议问题