Programación del scanner para el Lector CODE QR

Programado el Lector QR con Android con Google Mobile Visión

Video: Programación del scanner para el Lector CODE QR

Veremos como implementar el Scanner QR_CODE con Google Visión, solicitar permisos para usar la cámara de 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);
        }
    }

 


Programación del scanner para el Lector CODE QR

¿Quieres tener acceso al código fuente completo del proyecto final?

Contenido premium

COMPRAR AHORA

© Todos los derechos reservados | codea.app | Comunidad de programación web y desarrollo de aplicaciones móviles | Perú 2019