➜ 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
Capítulo 25 – Diseño y prueba final del Lector QR »
Descarga el código del proyecto
Descarga el código fuente del proyecto adquiriendo el curso completo
Comprar