Android (안드로이드)

[Android] QR코드 스캔 · 생성 라이브러리 - ZXing 사용해보기 / 스캔 화면 세로모드 고정

Oscar:) 2024. 10. 4. 09:00

 

 

안드로이드 앱에서 QR코드를 생성하고 스캔하는 방법을 소개한다.

 

물론 직접 구현하지는 않고 ZXing 라이브러리를 사용할 것이다.

 

 

 

 

 


 

ZXing ?

 

 

우리가 사용할 라이브러리는 '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 - journeyapps/zxing-android-embedded

github.com

 

 

깃허브에서는 다음과 같이 소개하고 있다.

 

"디코딩을 위해서 사용하는 Android용 바코드 스캔 라이브러리"

 

위 소개에서는 디코딩하는 역할만 언급되었지만,

바코드를 디코딩하는 것 뿐만 아니라 데이터를 인코딩하여 바코드를 생성할 수도 있다.

 

 

 

 

그리고 그 다음 문구는

"공식 zxing 라이브러리를 기반으로 제작되었다"

 

 

즉, 원본 라이브러리는 별도로 존재한다  ↓

 

 

GitHub - zxing/zxing: ZXing ("Zebra Crossing") barcode scanning library for Java, Android

ZXing ("Zebra Crossing") barcode scanning library for Java, Android - zxing/zxing

github.com

 

 

 

 

우리가 사용해볼 라이브러리는 공식 ZXing 라이브러리를

더욱 편리하게 사용할 수 있게끔 개조한 라이브러리라는 것을 알 수 있다.

오픈소스 최고 👍

 

 

구글에 "안드로이드 zxing" 을 검색하면 첫 페이지 90% 이상의 결과가

우리가 사용할 'ZXing Android Embedded' 라이브러리다.

 

역시 오픈소스는 결국 편의성이 좋은 라이브러리가 승리한다.

 

 

 

 


 

사용해보자

 

 

QR 코드를 생성하고, 생성한 QR 코드를 스캔하는 예제를 다뤄볼 것이다.

 

 

 

 

✅ build.gradle 의존성 설정

 

implementation("com.journeyapps:zxing-android-embedded:4.3.0")

 

 

 

 


 

 

✅ QR 코드 생성

 

BarcodeEncoder().encodeBitmap("문자열 데이터", BarcodeFormat.QR_CODE, width, height)

 

BarcodeEcoder 클래스를 사용하여 QR 코드를 생성하며,

encodeBitmap 함수는 비트맵을 반환한다.

 

 

 

 

따라서 다음과 같이 응용하여 이미지뷰에 띄워본다.

val content = "QR Test!"
val bitmap = BarcodeEncoder().encodeBitmap(content, BarcodeFormat.QR_CODE, 200, 200)
bind.qrImage.setImageBitmap(bitmap)

 

 

 

 

결과)

 

화면에 위와 같은 QR 코드가 출력되었다.

 

QR 코드 스캔 예제에서 위 QR 코드를 사용할 것이니, 따로 저장해놓자.

 

 

 

 


 

 

✅ QR 코드 스캔

 

스캔을 해야하니 Manifest 파일에 카메라 관련 권한을 추가해주자.

<uses-feature
	android:name="android.hardware.camera"
	android:required="false"/>
<uses-permission android:name="android.permission.CAMERA" />

 

 

액티비티에서 QR 코드 스캔을 실행해준다.

// 런처 세팅
val launcher = registerForActivityResult(ScanContract()) { result ->
	if (result.contents != null) {
		Log.d(TAG, "QR 코드 스캔 결과 : ${result.contents}")
	}
}


// 스캔할 시점에서
launcher.launch(ScanOptions())

 

ActivityResultLauncher를 이용하여 스캔 전용 액티비티로 다녀오는 원리다.

 

 

 

 

그리고 QR 코드 생성 예제에서 생성했던 QR 코드를 스캔해본다.

 

 

'삑' 소리와 함께 이전 액티비티로 되돌아온다.

 

 

 

 

 

QR 코드를 생성할 때 입력했던 데이터가 그대로 출력되는 것을 확인할 수 있다.

 

 

 

 


 

 

✅ 스캔 화면 방향 세로 고정

 

Manifest 파일에서 해당 액티비티의 Orientation을 지정해주면 된다.

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

 

이제 가로모드로 전환되지 않고 세로모드가 고정되어 사용할 수 있다.

 

 

 

 


 

 

 

 

 

QR코드를 다룰 수 있는 ZXing 라이브러리에 대해 알아보았다.

 

코드 1줄이면 QR 코드를 생성할 수 있고, 2~3줄로 QR 코드를 스캔할 수 있으니

정말 편리하게 잘 만들었다고 느껴졌다.

 

요즘 QR코드가 워낙 폭넓게 사용되다보니, 알아두면 유용하게 사용할 수 있을 것 같다.