{"id":22640720,"url":"https://github.com/emptyshop/qrcodereader","last_synced_at":"2026-04-22T21:37:07.118Z","repository":{"id":156622495,"uuid":"504908822","full_name":"EmptyShop/QRCodeReader","owner":"EmptyShop","description":"QR Code Reader (ZXing \u0026 Code Scanner)","archived":false,"fork":false,"pushed_at":"2022-06-18T21:45:37.000Z","size":141,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-29T05:25:44.131Z","etag":null,"topics":["android","codescanner","kotlin","zxing-qrcode"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/EmptyShop.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-06-18T17:31:07.000Z","updated_at":"2022-06-18T17:35:02.000Z","dependencies_parsed_at":null,"dependency_job_id":"abfd1634-044b-4b73-8960-775b39fa490d","html_url":"https://github.com/EmptyShop/QRCodeReader","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/EmptyShop/QRCodeReader","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EmptyShop%2FQRCodeReader","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EmptyShop%2FQRCodeReader/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EmptyShop%2FQRCodeReader/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EmptyShop%2FQRCodeReader/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/EmptyShop","download_url":"https://codeload.github.com/EmptyShop/QRCodeReader/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EmptyShop%2FQRCodeReader/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262113374,"owners_count":23261011,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","codescanner","kotlin","zxing-qrcode"],"created_at":"2024-12-09T04:13:35.458Z","updated_at":"2026-04-22T21:37:02.073Z","avatar_url":"https://github.com/EmptyShop.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# QRCodeReader\nQR Code Reader (ZXing \u0026amp; Code Scanner)\n\nEste proyecto lo hice para comparar 2 librerías de lectura de códigos QR: ZXing y CodeScanner (que está basada en Zxing). La app contiene 2 botones, uno para utilizar cada librería. También tiene 2 controles de texto, uno para desplegar el texto decodificado y el otro para mostrar el formato del código leído.\n\n# Cómo lo Hice\n\n## En este proyecto utilicé:\n  - el sdk 32 como target y el sdk 26 como versión mínima.\n  - Kotlin versión 1.4.32.\n  - ZXing 4.1.0\n  - Code Scanner 2.3.2\n  - Gradle 4.1.3\n\n## Lo implementé así:\n  - En las dependencias agregué la implementación de ZXing: `com.journeyapps:zxing-android-embedded:4.1.0`\n  - También añadí la implementación de Code Scanner: `com.github.yuriy-budiyev:code-scanner:2.3.2`\n  - Además agregué en la sección de repositorios del archivo build.gradle de proyecto la siguiente referencia:\n  \n     ```sh\n     maven { url 'https://jitpack.io' }\n     ```\n  \n    Esto es para poder usar repositorios alojados en Github y Code Scanner está alojado ahí.\n  - Luego, en el manifest, le asigné permisos para usar la cámara:\n  \n    ```sh\n    \u003cuses-permission android:name=\"android.permission.CAMERA\" /\u003e\n    \u003cuses-feature\n        android:name=\"android.hardware.camera\"\n        android:required=\"false\" /\u003e\n    ```\n    \n  - Para usar Code Scanner usamos un View usado cuando la cámara está capturando el código:\n\n    ```sh\n    \u003ccom.budiyev.android.codescanner.CodeScannerView\n            android:id=\"@+id/scanner_view\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\" /\u003e\n    ```\n    \n  - En la implementación de la clase MainActivity usamos esta referencia para ZXing:\n    \n    ```sh\n    import com.google.zxing.integration.android.IntentIntegrator\n    ```\n    \n  - Con Code Scanner incializamos algunas cosas:\n  \n    ```sh\n    val scannerView = findViewById\u003cCodeScannerView\u003e(R.id.scanner_view)\n\n    codeScanner = CodeScanner(this, scannerView)\n\n    // Parameters (default values)\n    codeScanner.camera = CodeScanner.CAMERA_BACK\n    codeScanner.formats = CodeScanner.ALL_FORMATS\n\n    codeScanner.autoFocusMode = AutoFocusMode.SAFE\n    codeScanner.scanMode = ScanMode.SINGLE\n    codeScanner.isAutoFocusEnabled = true\n    codeScanner.isFlashEnabled = false\n\n    scannerView.isVisible = false\n    ```\n        \n  - Agregamos callbacks de decodificación y error para Code Scanner:\n\n    ```sh\n    // Callbacks\n    codeScanner.decodeCallback = DecodeCallback {\n        runOnUiThread{\n            scannerView.isVisible = false\n            messageText.text = it.text\n            messageFormat.text = it.barcodeFormat.toString()\n        }\n    }\n\n    codeScanner.errorCallback = ErrorCallback {\n        runOnUiThread{\n            Toast.makeText(this, \"Camera Initialization error: ${it.message}\",\n                Toast.LENGTH_LONG).show()\n            messageText.text = String()\n            messageFormat.text = String()\n            scannerView.isVisible = false\n        }\n    }\n    ```\n    \n    En el código, `messageText` es el TextView para obtener el texto del código QR; `messageFormat` es el Text View para obtener el formato del código.\n\n  - En el caso de ZXing, hice la implementación de su funcionalidad en el evento `onClick` del botón `scanBtnZXing`:\n\n    ```sh\n    // adding listener to the button for ZXing\n    scanBtnZXing.setOnClickListener(this)\n\n    override fun onClick(v: View?) {\n        // we need to create the object\n        // of IntentIntegrator class\n        // which is the class of ZXing QR library\n        val intentIntegrator = IntentIntegrator(this)\n        intentIntegrator.setPrompt(\"Scan a barcode or QR Code\")\n        intentIntegrator.setOrientationLocked(true)\n        intentIntegrator.initiateScan()\n    }\n    ```\n\n    Eso anterior fue para iniciar la captura del código. Para procesar el resultado lo hice en este método:\n    \n    ```sh\n    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {\n        super.onActivityResult(requestCode, resultCode, data)\n        val intentResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data)\n        // if the intentResult is null then\n        // toast a message as \"cancelled\"\n        if (intentResult != null){\n            if (intentResult.contents.isNullOrEmpty()){\n                Toast.makeText(baseContext, \"Cancelled\", Toast.LENGTH_SHORT).show()\n            }\n            else{\n                // if the intentResult is not null we'll set\n                // the content and format of scan message\n                messageText.text = intentResult.contents\n                messageFormat.text = intentResult.formatName\n            }\n        }\n        else{\n            super.onActivityResult(requestCode, resultCode, data)\n        }\n    }\n    ```\n     \n    Aquí uso el intent que creé en el evento `onClick`. Tomo los datos devueltos usando el método `parseActivityResult` y los asigno a los TextViews de formato y texto.\n    \n## La ayuda que utilicé:\nPara este proyecto encontré en internet los siguientes recursos que me parecieron los más confiables y útiles:\n\n  * [¿Cómo leer el código QR usando la biblioteca ZXing en Android?](https://es.acervolima.com/como-leer-el-codigo-qr-usando-la-biblioteca-zxing-en-android/)\n  \n  * [La documentación oficial de Code Scanner](https://github.com/yuriy-budiyev/code-scanner)\n\n  * [Zxing – Leer QR y códigos de barras en Kotlin](https://cursokotlin.com/zxing-leer-qr-codigos-de-barras-en-kotlin/)\n\n# Lo que sigue\nEl alcance de este proyecto sólo es la comparación de ambas librerías así que no tengo mucho más qué agregar. Tal vez darle una vista más atractiva y jugar con las propiedades y atributos de cada librería.\n\nSiéntete libre de comentar y sugerir cosas para esta app.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femptyshop%2Fqrcodereader","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Femptyshop%2Fqrcodereader","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femptyshop%2Fqrcodereader/lists"}