이번 시간에는 큐알코드(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
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
<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 설정
[안드로이드 코틀린] 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
[안드로이드 코틀린] 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 |
댓글 영역