이번 시간에는 큐알코드(QRCODE) 라이브러리를 추가해서 스캔하는 방법에 대하여 알아보겠습니다.
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
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature
android:name="android.hardware.camera"
android:required="false"/>
- 설명 -
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>
- 설명 -
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 설정
2022.06.20 - [안드로이드] - [안드로이드 코틀린] 밀어서 화면 변경 ViewPager2 갤러리 느낌으로 만드는 방법
2022.06.17 - [안드로이드] - [안드로이드 코틀린] 정해진 시간에 알람 울리는 방법 Notification TimePickerDialog part1 - 설정
[안드로이드 코틀린] DrawerLayout Navigation 만드는 방법 part1 - 화면 만들기 (0) | 2022.07.01 |
---|---|
[안드로이드 코틀린] 전화 걸기(Intent.ACTION_VIEW) 기능 만들어보기 (0) | 2022.06.30 |
[안드로이드 코틀린] Database Room 사용법 part5 - 삭제 (0) | 2022.06.28 |
[안드로이드 코틀린] Database Room 사용법 part4 - 수정 (0) | 2022.06.27 |
[안드로이드 코틀린] Database Room 사용법 part3 - 리스트 (0) | 2022.06.26 |
댓글 영역