상세 컨텐츠

본문 제목

[안드로이드 코틀린] 큐알코드(QR CODE) 스캔하는 방법

안드로이드

by aries574 2022. 6. 29. 19:12

본문


이번 시간에는 큐알코드(QRCODE) 라이브러리를 추가해서 스캔하는 방법에 대하여 알아보겠습니다.


목차

1. 실행 화면
2. 라이브러리 등록
3. 권한 등록
4. 메인 화면 구성 activity_main.xml
5. 메인 코드 구현 MainActivity.kt


1. 실행 화면


2. 라이브러리 등록

build.gradle(Module:프로젝트명:app)

dependencies 괄호 안에 아래 코드를 넣어주시면 됩니다.

implementation 'com.github.yuriy-budiyev:code-scanner:2.3.2'

 

setting.gradle

repositories 괄호 안에 아래 코드를 넣어주시면 됩니다.

maven { url 'https://jitpack.io' }

- 참조 문서 -

https://github.com/yuriy-budiyev/code-scanner

 

GitHub - yuriy-budiyev/code-scanner: Code scanner library for Android, based on ZXing

Code scanner library for Android, based on ZXing. Contribute to yuriy-budiyev/code-scanner development by creating an account on GitHub.

github.com

 


3. 권한 등록

AndroidManifest.xml

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

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

 

 

4. 메인 화면 구성 activity_main.xml

 - 설명 -

1. QRCODE 스캔하는 CodeScannerView

2. QRCODE 스캔한 값을 보여주는 TextView

3. QRCODE 재시작하는 Button

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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">

    <com.budiyev.android.codescanner.CodeScannerView
        android:id="@+id/scanner_view"
        android:layout_width="match_parent"
        android:layout_height="400dp" />

    <TextView
        android:id="@+id/code_text"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:layout_below="@id/scanner_view"
        android:background="@android:color/black"
        android:gravity="center"
        android:textColor="@android:color/white"
        android:textSize="20sp" />

    <Button
        android:id="@+id/reset_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/code_text"
        android:layout_centerHorizontal="true"
        android:text="reSet" />
</RelativeLayout>

 

5. 메인 코드 구현 MainActivity.kt

- 설명 -

1. ContextCompat.checkSelfPermission

권한 체크

2. scan()

코드 스캔하는 함수

3. codeScanner.apply

코드 스캔 설정

apply 덕분에 객체를 속성 앞에 붙일 필요없이

속성만 입력 가능하게 해준다.

예: codeScanner.camera -> camera

4. onRequestPermissionsResult

권한 요청 처리 결과를 알려주는 함수

class MainActivity : AppCompatActivity() {

    lateinit var codeScanner: CodeScanner

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

        //권한 체크
        if(ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) ==
                PackageManager.PERMISSION_DENIED){
            ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.CAMERA),
            123)
        }else{
            //QRCODE 스캔
            scan()
        }

        //리셋버튼 이벤트
        val reSetBtn: Button = findViewById(R.id.reset_btn)
        reSetBtn.setOnClickListener {
            //초기화 확인하고 실행
            if(::codeScanner.isInitialized){
                codeScanner.startPreview()
            }
        }
    }

    //QRCODE 스캔
    private fun scan() {
        //초기화
        val scannerView: CodeScannerView = findViewById(R.id.scanner_view)

        //QRCODE 보여줄 텍스트뷰
        val codeText: TextView = findViewById(R.id.code_text)

        //스캐너 초기화
        codeScanner = CodeScanner(this, scannerView)

        //스캐너 셋팅
        codeScanner.apply {
            camera = CodeScanner.CAMERA_BACK
            formats = CodeScanner.ALL_FORMATS //포맷

            autoFocusMode = AutoFocusMode.SAFE //포커스
            isAutoFocusEnabled = true //자동포커스 활성화
            isFlashEnabled = false //플래쉬

            //QRCODE 확인되면 실행
            decodeCallback = DecodeCallback {
                runOnUiThread {

                    //텍스트에 QRCODE 보여주기
                    codeText.text = it.text
                }
            }
            //에러 발생 시 실행
            codeScanner.errorCallback = ErrorCallback {
                runOnUiThread {
                    codeText.text = "Scan Error ${it.message}"
                }
            }
        }

        //스캔뷰 클랙 이벤트
        scannerView.setOnClickListener {
            //초기화 확인하고 실행
            if(::codeScanner.isInitialized){
                codeScanner.startPreview()
            }
        }
    }

    //권한요청 처리결과
    override fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<out String>,
        grantResults: IntArray
    ) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        if(requestCode == 123){
            if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
                Toast.makeText(applicationContext, "카메라 권한 부여됨",
                    Toast.LENGTH_SHORT).show()
            }else{
                Toast.makeText(applicationContext, "카메라 권한 거부됨",
                    Toast.LENGTH_SHORT).show()
            }
        }
    }

    //액티비티 재실행 되면 실행됨
    override fun onResume() {
        super.onResume()
        //초기화 확인하고 실행
        if(::codeScanner.isInitialized){
            codeScanner.startPreview()
        }
    }

    //액티비티 정지되면 실행됨
    override fun onPause() {
        super.onPause()
        //초기화 확인하고 실행
        if(::codeScanner.isInitialized){
            codeScanner.releaseResources()
        }
    }
}

2022.06.24 - [안드로이드] - [안드로이드 코틀린] Database Room 사용법 part1 - Room 설정

 

[안드로이드 코틀린] Database Room 사용법 part1 - Room 설정

안드로이드에서 앱 내부에 데이터를 관리하는 기능을 하는 Room 사용법에 대하여 알아보겠습니다. 이번 시간에는 기본 설정을 해보겠습니다. 아래 링크를 들어가시면 Room에 대한 상세한 정보를

aries574.tistory.com

2022.06.20 - [안드로이드] - [안드로이드 코틀린] 밀어서 화면 변경 ViewPager2 갤러리 느낌으로 만드는 방법

 

[안드로이드 코틀린] 밀어서 화면 변경 ViewPager2 갤러리 느낌으로 만드는 방법

이번 시간에는 뷰페이저2(ViewPager2)를 이용해서 이미지를 가로, 세로 방향으로 밀어서 갤러리 느낌으로 보여주는 방법을 알아보겠습니다. 목차 1. 실행 화면 2. 라이브러리 등록 3. dataBinding 설

aries574.tistory.com

2022.06.17 - [안드로이드] - [안드로이드 코틀린] 정해진 시간에 알람 울리는 방법 Notification TimePickerDialog part1 - 설정

 

[안드로이드 코틀린] 정해진 시간에 알람 울리는 방법 Notification TimePickerDialog part1 - 설정

사용자가 정한 시간에 알람이 울리게 하는 방법에 대하여 알아보겠습니다. 이번 시간에는 알람 관련 클래스와 설정들을 만들어 보겠습니다. 목차 1. 알람 클래스 만들기 NotificationHelper.kt 2. 

aries574.tistory.com

 

반응형

관련글 더보기

댓글 영역