본문 바로가기
Kotlin/Kotlin 팁

Android 카메라 사용 방법

by MonoSoft 2020. 10. 6.
728x90
반응형

Android 카메라 사용 방법

 

우선 아래와 같이 화면을 꾸며준다.

이미지와 버튼을 올려놓고 적당한 id명과 text를 설정해준다

 

 

 

 

 

 

그리고 다음과 같이 코딩을 해주고 숙지한다.

 

 

 

package com.monosoft.androidcamera

import android.app.Activity
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.graphics.Bitmap
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.provider.MediaStore
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import kotlinx.android.synthetic.main.activity_main.*
import java.util.jar.Manifest

class MainActivity : AppCompatActivity() {

//카메라 권한 상수
val CAMERA_PERMISSION = arrayOf(android.Manifest.permission.CAMERA)
//갤러기 권한 상수 (Read, Write)
val STORAGE_PERMISSION = arrayOf(android.Manifest.permission.READ_EXTERNAL_STORAGE
,android.Manifest.permission.READ_EXTERNAL_STORAGE)

//카메라,갤러리 미승인시 요청 처리 상수
val FLAG_PERM_CAMERA = 98
val FLAG_PERM_STORAGE = 99

//카메라 열기 함수
val FALG_REQ_CAMERA = 101


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

buttonCamera.setOnClickListener {
//카메라 권한 체크
if(isPermitted(CAMERA_PERMISSION)) {
//승인시 카메라 염
openCamera()
} else {
//미 승인시 권한 요청
ActivityCompat.requestPermissions(this,CAMERA_PERMISSION,FLAG_PERM_CAMERA)
//없을때 요청을 날리면 작은 팝업이 뜨는데 승인 거절을 클릭하면
}
}
}

//카메라 권한 체크 함수
fun isPermitted(permissions:Array<String>) : Boolean {
for (permission in permissions) {
val result = ContextCompat.checkSelfPermission(this, permission)
if (result != PackageManager.PERMISSION_GRANTED) {
return false
}
}
return true
}

//카메라 열기 함수
fun openCamera() {
//미리정의한 카메라 상수를 intent에 넣음
val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
//아래 함수에 담아서 보냄 , 리턴으로 카메라 찍은걸 돌려줌 ,두번째 파라메타 요청코드는 101
startActivityForResult(intent,FALG_REQ_CAMERA)
}

//openCamera 함수에 startActivityForResult 실행수 카메라 찍은 사진을 아래 함수를 통해 돌려줌
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)

if(resultCode == Activity.RESULT_OK) { //정상일때만 체크
when (requestCode) {
FALG_REQ_CAMERA -> {
//data로 비트맵으로 사진이 넘어온걸 imagePreview 적용
val bitmap = data?.extras?.get("data") as Bitmap
imagePreview.setImageBitmap(bitmap)
}
}
}
}

//없을때 요청을 날리면 작은 팝업이 뜨는데 승인 거절을 클릭하면 안드로이드가 아래함수를 호출해줌
override fun onRequestPermissionsResult(
requestCode: Int, //코드 위에 FLAG_PERM_CAMERA 상수
permissions: Array<out String>,
grantResults: IntArray
) {
when(requestCode) {
FLAG_PERM_CAMERA -> {
var checked = true
for(grant in grantResults) {
//승인이 하나라도 안된걸 체크
if(grant != PackageManager.PERMISSION_GRANTED) {
//승인안된게 있음 false
checked = false
break
}
}
//모두 승인이면 카메라 실행
if (checked) {
openCamera()
}
}
}
}

}

 

결과 영상

 

 

728x90
반응형

댓글