Capitulo 24 del Módulo 3 Aplicación Android - Lector QR

➜ Implementación del scanner QR

¿Cómo programar un Lector QR en Android con Google Mobile Visión? | Para implementar el Scanner QR CODE con Google Visión, debemos solicitar permisos para usar la cámara en Android y decodificar el valor del QR cifrado.

Implementación del lector CODE QR en Android Studio

La programación de un Scanner QR en una aplicación Android requiere al menos el uso de la cámara por consecuencia gestionar los permisos, y una librería tercera para poder llevar a cabo el proceso de descifrado del valor del código QR.

Para ello podemos disponer de varias librerías como:

  • Google Mobile Vision
  • Barcode
  • Xing, etc

¿Cómo integrar Google Mobile Visión ?

En una librería propia de Google que esta dentro de Googe Play Services , pero tambien podemos usarla por separado, a fin de no cargar demasiado a nuestra app.

La sintaxis de uso corresponde al archico gradle en module en la seccion dependencias y debemos agregar la siguiente linea     implementation 'com.google.android.gms:play-services-vision:19.0.0' :
 

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'com.loopj.android:android-async-http:1.4.9'
    implementation 'com.squareup.picasso:picasso:2.5.2'
    implementation 'com.google.android.gms:play-services-vision:19.0.0'

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.2.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

 

Uso de la dependencia en la actividad LectorActivity:

  • Creamos los instancias correspondendientes
  • Declaramos el uso de la cámara
public class LectorActivity extends AppCompatActivity {

    private SurfaceView camara;
    private BarcodeDetector detector;
    private CameraSource cameraSource;
    private  String token;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lector);
        camara = findViewById(R.id.Scanner);

        detector = new BarcodeDetector.Builder(this)
                .setBarcodeFormats(Barcode.QR_CODE)
                .build();

        cameraSource = new CameraSource.Builder(this,detector)
                .setRequestedPreviewSize(640,300)
                .build();

        camara.getHolder().addCallback(new SurfaceHolder.Callback() {
            @Override
            public void surfaceCreated(SurfaceHolder surfaceHolder) {
                // permisos camara
                if(ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.CAMERA)!= PackageManager.PERMISSION_GRANTED){
                    return;
                }
                try {
                    cameraSource.start(camara.getHolder());

                }catch (IOException e){
                    e.printStackTrace();
                }
            }

            @Override
            public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {

            }

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

            }

        });

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

            }

            @Override
            public void receiveDetections(Detector.Detections<Barcode> detections) {
                SparseArray<Barcode> codes = detections.getDetectedItems();
                if(codes.size()!=0){
                    token= codes.valueAt(0).displayValue;
                    startActivity(new Intent(getApplicationContext(), ProductoActivity.class)
                    .putExtra("id",Integer.parseInt(token)));
                    finish();
                }
            }
        });


    }
}

Permisos para usar la cámara en para el Sanneo del Lector

Parte del código es:

private void checkPermission() {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
            //Config.mensaje(this, "This version is not Android 6 or later " + Build.VERSION.SDK_INT);
        } else {
            int hasWriteContactsPermission = checkSelfPermission(android.Manifest.permission.CAMERA);
            if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {
                requestPermissions(new String[] {Manifest.permission.CAMERA},
                        REQUEST_CODE_ASK_PERMISSIONS);
                //Config.mensaje(this, "Requesting permissions");
            }else if (hasWriteContactsPermission == PackageManager.PERMISSION_GRANTED){
                //Config.mensaje(this, "The permissions are already granted ");
                //openCamera();
            }
        }
        return;
    }
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        if(REQUEST_CODE_ASK_PERMISSIONS == requestCode) {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {

            } else {

            }
        }else{
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }

 


4028 visitas

Descarga el código del proyecto

Descarga el código fuente del proyecto adquiriendo el curso completo

Comprar

¡Qué aprenderás?

tooltip bs-tooltip-top bs-tooltip-end bs-tooltip-bottom bs-tooltip-start show fade tooltip-inner

Codea Applications

México, Colombia, España, Venezuela, Argentina, Bolivia, Perú