Intent-Implicito (Scanner)

Intent Implicito

El ejercicio consta de hacer uso de una aplicación de terceros y traer la información a nuestro aplicativo, la ventaja es que solo son necesarios unas cuantas lineas de código para poder implentar las funcionalidades que nosotros necesitemos, ya que si lo hacemos desde cero seria mas tardado el desarrollo.

Iniciamos con el layout el cúal es bastante sencillo, consta de un Button para poder iniciar el lector de codigos y un TextView para mostrar la información escaneada.

layout

main_layout.xml

   1   │  <?xml version="1.0" encoding="utf-8"?>
   2   │ <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
   3   │     xmlns:app="http://schemas.android.com/apk/res-auto"
   4   │     xmlns:tools="http://schemas.android.com/tools"
   5   │     android:layout_width="match_parent"
   6   │     android:layout_height="match_parent"
   7   │     tools:context=".MainActivity">
   8   │ 
   9   │     <Button
  10   │         android:id="@+id/btnScan"
  11   │         android:layout_width="wrap_content"
  12   │         android:layout_height="wrap_content"
  13   │         android:layout_marginStart="8dp"
  14   │         android:layout_marginEnd="8dp"
  15   │         android:layout_marginBottom="64dp"
  16   │         android:text="Scan"
  17   │         app:layout_constraintBottom_toBottomOf="parent"
  18   │         app:layout_constraintEnd_toEndOf="parent"
  19   │         app:layout_constraintStart_toStartOf="parent" />
  20   │ 
  21   │     <TextView
  22   │         android:id="@+id/txtInfo"
  23   │         android:layout_width="wrap_content"
  24   │         android:layout_height="wrap_content"
  25   │         android:layout_marginStart="8dp"
  26   │         android:layout_marginTop="128dp"
  27   │         android:layout_marginEnd="8dp"
  28   │         app:layout_constraintEnd_toEndOf="parent"
  29   │         app:layout_constraintStart_toStartOf="parent"
  30   │         app:layout_constraintTop_toTopOf="parent" />
  31   │ 
  32   │ </android.support.constraint.ConstraintLayout>

build.gradle

Las siguentes lineas se colocan en las dependencias para poder ocupar la libreria.

  • implementation 'com.journeyapps:zxing-android-embedded:4.3.0
  • implementation 'com.google.zxing:core:3.3.0
dependencies {
       implementation 'com.android.support:appcompat-v7:28.0.0'
       implementation 'com.android.support.constraint:constraint-layout:2.0.4'

       implementation 'com.journeyapps:zxing-android-embedded:4.3.0
       implementation 'com.google.zxing:core:3.3.0
       
       testImplementation 'junit:junit:4.13.2'
       androidTestImplementation 'com.android.support.test:runner:1.0.2'
       androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
       }

MainActivity.java

Aqui vamos a ocupar la libreria de zxing, esta libreria será la estaremos ocupando en la linea 27 del codigo de ejemplo.

   1   │ package com.talentounido.qrscanner;
   2   │ 
   3   │ import android.content.Intent;
   4   │ import android.provider.MediaStore;
   5   │ import android.support.annotation.Nullable;
   6   │ import android.support.v7.app.AppCompatActivity;
   7   │ import android.os.Bundle;
   8   │ import android.widget.Button;
   9   │ import android.widget.TextView;
  10   │ 
  11   │ public class MainActivity extends AppCompatActivity {
  12   │ 
  13   │     private Button btnScan;
  14   │     private TextView txtView;
  15   │ 
  16   │     private static final int QR_SCAN_CODE = 5;
  17   │ 
  18   │     @Override
  19   │     protected void onCreate(Bundle savedInstanceState) {
  20   │         super.onCreate(savedInstanceState);
  21   │         setContentView(R.layout.activity_main);
  22   │ 
  23   │         btnScan = findViewById(R.id.btnScan);
  24   │         txtView = findViewById(R.id.txtInfo);
  25   │ 
  26   │         btnScan.setOnClickListener(v -> {
  27   │             Intent scan_init = new Intent("com.google.zxing.client.android.SCAN");
  28   │             if(scan_init.resolveActivity(getPackageManager())!= null){
  29   │               startActivityForResult(scan_init,QR_SCAN_CODE);
  30   │             }
  31   │         });
  32   │     }
  33   │ 
  34   │     @Override
  35   │     protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
  36   │         super.onActivityResult(requestCode, resultCode,data);
  37   │ 
  38   │         if (requestCode==QR_SCAN_CODE && resultCode == RESULT_OK) {
  39   │           
  40   │           Bundle extras = data.getExtras();
  41   │           String info = (String) extras.get("SCAN_RESULT");
  42   │           txtView.setText(info);
  43   │         }
  44   │ 
  45   │     }
  46   │ }

Ejecución

Escaneo de código

Escaneo

Resultado del escaneo

Resultado

Cabe destacar que tengo instalado un lector de código de barras/qr al que llamo desde la aplicación de práctica. Apps

Este ejemplo se encuentra en:

Repositorio de la libreria: