728x90
반응형

💡 개요


오늘은 Zxing(Zebra Crossing) 라이브러리를 이용하여 QR코드 스캔을 가능하게 하는 것을 공부하려고 한다.

Zxing 라이브러리는 구글에서 제공하는 오픈소스로 다양한 바코드를 생성하거나 인식할 수 있다.

더 자세한 내용은 아래의 Github에서 확인할 수 있다.

https://github.com/journeyapps/zxing-android-embedded

 

GitHub - journeyapps/zxing-android-embedded: Barcode scanner library for Android, based on the ZXing decoder

Barcode scanner library for Android, based on the ZXing decoder - GitHub - journeyapps/zxing-android-embedded: Barcode scanner library for Android, based on the ZXing decoder

github.com

 

💡 STEP 1 : 라이브러리 추가 및 minSdk 설정


우선 Zxing 라이브러리를 사용하기 위해서는 build.gradle(Module)에 다음을 추가해줘야 한다.

implementation 'com.journeyapps:zxing-android-embedded:4.1.0'
implementation 'com.google.zxing:core:3.4.0'

그리고 기본적으로 새로운 프로젝트를 만들면 midSdk가 21이라고 적혀있을 텐데,

minSdk를 21로 설정하고 실행했을 때 에러가 발생했다.

그래서 minSdk를 24 이상으로 설정하는 것을 추천한다.

 

💡 STEP 2 : 권한 설정 및 세로 모드 설정


QR코드 스캔은 카메라를 이용하기 때문에 AndroidManifest.xml에 CAMERA 권한을 추가해줘야 한다.

<uses-permission android:name="android.permission.CAMERA" />

그리고 기본적으로 QR코드 스캔이 가로 모드로 실행되는 것을 알 수 있었다.

그렇기 때문에 세로로 QR코드를 스캔하고 싶을 경우에는 다음의 코드를 AndroidManifest.xml에 추가해야 한다.

<activity
    android:name="com.journeyapps.barcodescanner.CaptureActivity"
    android:screenOrientation="fullSensor"
    tools:replace="screenOrientation" />

 

💡 STEP 3 : UI 및 코드 작성


나는 Button을 클릭했을 때 QR코드 스캔 화면이 뜨도록 할 것이다.

그래서 activity_main.xml 가운데에 Button 하나를 만들어줬다.

[activity_main.xml]

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btnQRScan"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="QR코드 스캔"
        android:textSize="30sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

 

QR코드를 스캔하기 위한 UI를 만들었으면 아래의 코드를 작성하면 QR코드를 스캔할 수 있다.

package com.example.qrscanexample

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.Button
import android.widget.Toast
import com.google.zxing.integration.android.IntentIntegrator
import org.json.JSONObject

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val btnQRScan = findViewById<Button>(R.id.btnQRScan)
        btnQRScan.setOnClickListener {
            val integrator = IntentIntegrator(this)
            integrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE)
            integrator.setPrompt("쿠폰의 QR코드를 인식시켜 주세요.")
            integrator.setOrientationLocked(true)
            integrator.setBarcodeImageEnabled(false)
            integrator.setBeepEnabled(false)
            integrator.initiateScan()
        }
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        val result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data)

        if (result != null) {
            Toast.makeText(this, result.contents, Toast.LENGTH_SHORT).show()
        } else {
            super.onActivityResult(requestCode, resultCode, data)
        }
    }
}

QR코드 스캐너를 위한 설정들을 해줬고, 나는 QR코드 스캔한 결과를 Toast로 띄우도록 했다.

설정에 대해 자세한 건 Zxing Github를 참고하길 바란다.

 

💡 결과


우선 결과를 확인하기 위해서는 QR코드가 필요한데 QR코드는 아래의 사이트에서 만들 수 있다.

https://ko.qr-code-generator.com/

 

QR Code Generator | 무료 QR 코드 만들기

URL, vCard 등을 위한 QR Code Generator입니다. 로고, 색상, 프레임을 추가하고 높은 인쇄 품질로 다운로드할 수 있습니다. 지금 무료 QR 코드를 받으세요!

ko.qr-code-generator.com

 

나는 'Hello World'라는 텍스트를 가진 QR코드를 만들어서 테스트했다.

 

결과를 보면 다음과 같이 QR코드를  스캔해 'Hello World'라는 Toast를 띄우는 것을 볼 수 있다.

728x90
반응형

BELATED ARTICLES

more