QRCode-Scan 예제코드
Git: https://github.com/younminchan/kotlin-study/tree/main/QRCode_kotlin
QRCode-Scan하는 방법에 대해서 알아보겠습니다.
먼저 QRCode를 Scan하기 위해서 필요한 프로젝트 설정을 합니다.
1. build.gradle(:app)
- QR코드 라이브러리를 추가
//QR-Code (minSDK: 23)
implementation ('com.journeyapps:zxing-android-embedded:3.6.0') { transitive = false }
implementation 'com.journeyapps:zxing-android-embedded:3.6.0'
- ViewBinding설정
android{
...
buildFeatures{
viewBinding true
}
...
}
2. AndroidManifest.xml
- QRCode-Scan 실행되는 activity설정
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.qrcode_kotlin">
<application
...
<!-- QRCode Scan -->
<activity
android:name="com.journeyapps.barcodescanner.CaptureActivity"
android:screenOrientation="fullSensor"
tools:replace="screenOrientation" />
...
</application>
</manifest>
3. MainActivity.kt
ViewBinding처리 및 메인액티비티에 QRCode클래스를 추가 및 클릭리스너 설정
//MainActivity.kt
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
var qrCodeScan = QRCodeScan(this)
/** Click */
binding.tvQrScan.setOnClickListener {
qrCodeScan.startQRScan()
}
}
}
4. 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">
<TextView
android:id="@+id/tv_qr_scan"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#F0F0F0"
android:padding="20dp"
android:text="Start QR-Scan"
android:textColor="#000000"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
레이아웃을 코드추가를 하면 다음과 같이 나오게됩니다.
5. QRCodeScan.kt
QR코드 스캔에 필요한 클래스를 구성해줍니다.
중요한 부분은 주석을 달아두었으니 필요시 참고하여 수정하면 되겠습니다.
또 여기서 중요한 부분은 원래 activity start를 하게되면 main에 onActivityResult에서 다시 체크했었는데요. 최근에는 클린한 코드를 구성하기 위해 다음과 같이 activityResult변수를 따로 구성하여 launch해주는 방법을 사용하고 있습니다. 참고해주세요!
//QRCodeScan.kt
class QRCodeScan(private val act: MainActivity) {
/** QRCode Scan */
fun startQRScan(){
val intentIntegrator = IntentIntegrator(act)
intentIntegrator.setPrompt("안내선 안에 QR코드를 맞추면 자동으로 인식됩니다.") //QR코드 스캔 액티비티 하단에 띄울 텍스트 설정
intentIntegrator.setOrientationLocked(false) //화면회전을 막을 것인지 설정 (default 세로모드)
intentIntegrator.setBeepEnabled(false) //QR코드 스캔 시 소리를 낼 지 설정
activityResult.launch(intentIntegrator.createScanIntent())
}
/** onActivityResult */
private val activityResult = act.registerForActivityResult(ActivityResultContracts.StartActivityForResult()){ result ->
val data = result.data
val intentResult: IntentResult? = IntentIntegrator.parseActivityResult(result.resultCode, data)
if(intentResult != null){
//QRCode Scan 성공
if(intentResult.contents != null){
//QRCode Scan result 있는경우
Toast.makeText(act, "인식된 QR-data: ${intentResult.contents}", Toast.LENGTH_SHORT).show()
}else{
//QRCode Scan result 없는경우
Toast.makeText(act, "인식된 QR-data가 없습니다.", Toast.LENGTH_SHORT).show()
}
}else{
//QRCode Scan 실패
Toast.makeText(act, "QR스캔에 실패했습니다.", Toast.LENGTH_SHORT).show()
}
}
}
자 여기까지 따라오셨다면 코드는 모두 작성하였습니다.
빌드를 한번 해보겠습니다.
- QRCode 예시를 아래 사진을 참고하여 스캔해주세요~
- 메인페이지
- QR스캔을 위해 카메라 실행된 화면
- QRScan이 성공적으로 된 화면
'🖥 Programming > 📱 Android (Kotlin)' 카테고리의 다른 글
[Android][kotlin] FCM(Firebase Cloud Message) 구현하기! - 1편 (0) | 2022.02.24 |
---|---|
[Andorid][kotlin] DeepLink 딥링크 알아보기 - 2편 (0) | 2022.02.22 |
[Andorid][kotlin] DeepLink 딥링크 알아보기 - 1편 (0) | 2022.02.22 |
[kotlin][Android] SHA-1 확인하는 방법(Firebase) (0) | 2022.02.21 |
[Android][kotlin] 안드로이드 캡처방지 (FLAG_SECURE) (0) | 2022.02.17 |
[Android][Kotlin] 카카오 로그인 API연동(Kakao Login) - 3 (0) | 2022.02.10 |
[Android][Kotlin] 카카오 로그인 API연동(Kakao Login) - 2 (2) | 2022.02.10 |
[Android][Kotlin] 카카오 로그인 API연동(Kakao Login) - 1 (0) | 2022.02.10 |