[Android/Kotlin] #Zxing라이브러리를 이용한 QR코드 스캔
💡 개요
오늘은 Zxing(Zebra Crossing) 라이브러리를 이용하여 QR코드 스캔을 가능하게 하는 것을 공부하려고 한다.
Zxing 라이브러리는 구글에서 제공하는 오픈소스로 다양한 바코드를 생성하거나 인식할 수 있다.
더 자세한 내용은 아래의 Github에서 확인할 수 있다.
https://github.com/journeyapps/zxing-android-embedded
💡 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/
나는 'Hello World'라는 텍스트를 가진 QR코드를 만들어서 테스트했다.
결과를 보면 다음과 같이 QR코드를 스캔해 'Hello World'라는 Toast를 띄우는 것을 볼 수 있다.
'Android > Kotlin' 카테고리의 다른 글
[Android/Kotlin] #원형 ImageView(CircleImageView) 사용하기 (0) | 2022.06.09 |
---|---|
[Android/Kotlin] #Fragment 사용법 (0) | 2022.06.07 |
[Android/Kotlin] #TedPermission을 이용한 권한 관리 (1) | 2022.04.20 |
[Android/Kotlin] #View Binding 사용법 (0) | 2022.04.08 |
[Android/Kotlin] #RecyclerView 사용법 (2) (0) | 2022.04.07 |