CAMView Library es una solución simple para acceder a la cámara del dispositivo de los usuarios. Al usar esta biblioteca, podemos acceder a las cámaras de los usuarios y usarlas para realizar muchas funciones de la cámara, como escanear códigos de barras que se realizan mediante el uso de un motor de decodificación ZXing incorporado. Esta biblioteca contiene un conjunto de componentes que están listos para colocarse en su diseño para brindar acceso instantáneo a tantas funciones. Esta biblioteca maneja rutinas de bajo nivel como cámara, configuración, transmisión, orientación y muchas más. Solo tenemos que seguir unos pasos básicos para utilizar esta librería.
Métodos importantes
Métodos |
Descripción |
---|---|
onScannerStarted() | Este método se puede utilizar cuando se inicia el escáner. |
onScannerStopped() | Este método se llama cuando se detiene el escáner. |
onScannerError() | Este método se utiliza cuando el escáner da algún error. |
onCodeScanned() | Este método se llama cuando el escáner escanea los datos de la cámara. |
Implementación de la biblioteca CAMView
Con esta biblioteca, crearemos una aplicación simple de escaneo de códigos QR que escaneará datos del código QR y los mostrará en un TextView . qué
Implementación
Paso 1: Crear un nuevo proyecto
Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Tenga en cuenta que seleccione Java como lenguaje de programación.
Paso 2: Agregar dependencia a build.gradle (Módulo: aplicación)
Navegue a Gradle Scripts > build.gradle(Module:app) y agregue la siguiente dependencia en la sección de dependencias.
implementación (‘eu.livotov.labs.android:CAMView:2.0.1@aar’) {transitivo=verdadero}
Ahora la opción de sincronización aparecerá en la esquina superior derecha, haga clic en la opción sincronizar ahora .
Paso 3: Modifique el archivo strings.xml
A continuación se muestra el código para el archivo strings.xml .
XML
<resources> <string name="app_name">GFG APP</string> <string name="toggle_flash">Toggle Flash</string> <string name="action_settings">Settings</string> <string name="scanned_data">Scanned Data</string> </resources>
Paso 4: Agregar permiso para la cámara en el archivo de manifiesto
Estamos agregando un permiso de cámara y vibración en nuestro archivo de manifiesto. Vaya a la aplicación > manifiesto para encontrar AndroidManifest.xml . A continuación se muestra el fragmento de código para AndroidManifest.xml
XML
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.gtappdevelopers.camviewlibrary"> <!--Permission for camera--> <uses-permission android:name="android.permission.CAMERA" /> <!--Permission to vibrate--> <uses-permission android:name="android.permission.VIBRATE"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.CamViewLibrary"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
Paso 5: trabajar con el archivo activity_main.xml
Vaya a la aplicación > res > diseño > actividad_principal.xml y agregue el siguiente código a ese archivo. A continuación se muestra el código para el archivo activity_main.xml .
XML
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <!--Frame layout is required as we are using camera view--> <!--Below is the scannerliveview which will scan QR code--> <eu.livotov.labs.android.camview.ScannerLiveView android:id="@+id/camview" android:layout_width="match_parent" android:layout_height="match_parent" /> <!--TextView to display the scanned data--> <TextView android:id="@+id/idTVscanned" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" android:background="@color/white" android:padding="5dp" android:text="@string/scanned_data" android:textColor="@color/black" /> </FrameLayout>
Paso 6: trabajar con el archivo MainActivity.java
Vaya a la aplicación > java > el nombre del paquete de su aplicación > archivo MainActivity.java. A continuación se muestra el código del archivo MainActivity.java . Se agregan comentarios dentro del código para comprender el código con más detalle.
Java
import android.content.pm.PackageManager; import android.os.Bundle; import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import eu.livotov.labs.android.camview.ScannerLiveView; import eu.livotov.labs.android.camview.scanner.decoder.zxing.ZXDecoder; import static android.Manifest.permission.CAMERA; import static android.Manifest.permission.VIBRATE; public class MainActivity extends AppCompatActivity { private ScannerLiveView camera; private TextView scannedTV; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // check permission method is to check that the // camera permission is granted by user or not. // request permission method is to request the // camera permission if not given. if (checkPermission()) { // if permission is already granted display a toast message Toast.makeText(this, "Permission Granted..", Toast.LENGTH_SHORT).show(); } else { requestPermission(); } // initialize scannerLiveview and textview. scannedTV = findViewById(R.id.idTVscanned); camera = (ScannerLiveView) findViewById(R.id.camview); camera.setScannerViewEventListener(new ScannerLiveView.ScannerViewEventListener() { @Override public void onScannerStarted(ScannerLiveView scanner) { // method is called when scanner is started Toast.makeText(MainActivity.this, "Scanner Started", Toast.LENGTH_SHORT).show(); } @Override public void onScannerStopped(ScannerLiveView scanner) { // method is called when scanner is stopped. Toast.makeText(MainActivity.this, "Scanner Stopped", Toast.LENGTH_SHORT).show(); } @Override public void onScannerError(Throwable err) { // method is called when scanner gives some error. Toast.makeText(MainActivity.this, "Scanner Error: " + err.getMessage(), Toast.LENGTH_SHORT).show(); } @Override public void onCodeScanned(String data) { // method is called when camera scans the // qr code and the data from qr code is // stored in data in string format. scannedTV.setText(data); } }); } @Override protected void onResume() { super.onResume(); ZXDecoder decoder = new ZXDecoder(); // 0.5 is the area where we have // to place red marker for scanning. decoder.setScanAreaPercent(0.8); // below method will set secoder to camera. camera.setDecoder(decoder); camera.startScanner(); } @Override protected void onPause() { // on app pause the // camera will stop scanning. camera.stopScanner(); super.onPause(); } private boolean checkPermission() { // here we are checking two permission that is vibrate // and camera which is granted by user and not. // if permission is granted then we are returning // true otherwise false. int camera_permission = ContextCompat.checkSelfPermission(getApplicationContext(), CAMERA); int vibrate_permission = ContextCompat.checkSelfPermission(getApplicationContext(), VIBRATE); return camera_permission == PackageManager.PERMISSION_GRANTED && vibrate_permission == PackageManager.PERMISSION_GRANTED; } private void requestPermission() { // this method is to request // the runtime permission. int PERMISSION_REQUEST_CODE = 200; ActivityCompat.requestPermissions(this, new String[]{CAMERA, VIBRATE}, PERMISSION_REQUEST_CODE); } @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { // this method is called when user // allows the permission to use camera. if (grantResults.length > 0) { boolean cameraaccepted = grantResults[0] == PackageManager.PERMISSION_GRANTED; boolean vibrateaccepted = grantResults[1] == PackageManager.PERMISSION_GRANTED; if (cameraaccepted && vibrateaccepted) { Toast.makeText(this, "Permission granted..", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this, "Permission Denined \n You cannot use app without providing permission", Toast.LENGTH_SHORT).show(); } } } }
Salida: ejecutar en un dispositivo real
Ahora ejecute su aplicación en un dispositivo real y escanee un código QR de muestra y podrá probar la aplicación. Asegúrese de permitir el permiso de la cámara al iniciar la aplicación.
Enlace de GitHub para este proyecto: https://github.com/ChaitanyaMunje/QR_Code_Scanner
Publicación traducida automáticamente
Artículo escrito por chaitanyamunje y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA