[Kotlin] 권한과 카메라 사용하기

Taeyang Lee·2020년 8월 31일
0

Kotlin

목록 보기
4/10

안드로이드 폰에서 카메라로 사진을 촬영하고 이미지를 갤러리에서 가져오는 앱을 만들어 볼 것이다.

앞으로 만들 앱의 작동 순서는 다음과 같다.

  1. 카메라 앱 호출
  2. 사진 촬영
  3. 이미지 프리뷰

1. 권한 요청

카메라 관련 작업은 위험 권한으로 분류되어 권한 처리가 필요하다.
(안드로이드 6.0 (API level 23, targetSdkVersion 23) 버전 이후에 해당)

  • 위험권한(Dangerous Permission) : 사용자의 개인정보와 관련된 데이터나 기능을 액세스하거나 다른 앱 및 기기의 작동에 영향을 줄 우려가 있는 권한을 말한다.

권한 명세 설정은 AndroidManifest.xml 파일에서 할 수 있다.

[app]-[manifests]의 AnddroidManifest.xml 파일을 열고
① 카메라의 권한 ② 카메라로 촬영한 사진에 대한 접근 권한을 선언한다.
선언 위치는 < application > 태그 시작 전에 입력한다.

2. 권한 처리를 위한 코드 작성

class MainActivity : AppCompatActivity () 안에 다음 코드들을 순서대로 작성한다.

1. 권한 정의 및

권한을 그룹별로 나눠서 저장소 권한과 카메라 권한을 따로 상수에 저장해둔다.

val CAMERA_PERMISSION = arrayOf(Manifest.permission.CAMERA)
val STORAGE_PERMISSION = arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE)

2. 권한 플래그값 정의

숫자로 사용했던 권한 요청 플래그를 상수로 미리 정의하고 사용한다. 위 코드 밑에 작성한다.

val FLAG_PERM_CAMERA = 98
val FLAG_PERM_STORAGE = 99
* 플래그?

3. 권한 체크 메서드

승인 후 처리하는 코드는 반복문을 사용하기 때문에 개수와 상관없이 그대로 사용할 수 있다. onCreate() 아래에 작성한다.

fun checkPermission(permission: Array<out String>, flag: Int): Boolean {
	if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
		for (permission in permissions) {
			if (ContextCompat.checkSelfPermission(this, permisiion) !=
            	PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(this, permission,  flag)
                return false
                }
            }
        }
        return true
    }
* 조건문의 의미는 정확히 모르겠다...

4. 저장소 권한 후처리

권한 체크 메서드에 직접 권한 배열과 사용할 플래그를 넘겨서 체크하도록 변경한다. 이렇게 하면 카메라 권한은 카메라를 사용할 때만, 스토리지 권한은 스토리지를 사용할 때만 요청할 수 있다.

override fun onRequestPermissionsResult(requestCode: Int
					, permissions: Array<out String>
                    			, grantResults: IntArray) {
	when (requestCode) {
    		FLAG_PERM_STORAGE -> {
            		for (grant in grantResults) {
                    		if (grant != PackageManager.PERMISSION_GRANTED) {
                            		Toast.makeText(this, "저장소 권한을 승인해야지만 앱을 사용할 수 있습니다.", Toast.LENGTH_LONG).show()
            	  }
           }
    }
            

5. 저장소 권한 미 승인 시 앱 종료

이 앱은 저장소 권한이 없으면 사용할 수 없기 때문에 저장소 권한은 앱을 실행할 때 호출하고 권한 승인이 안되면 앱이 종료되로록 한다.

Toast 메시지를 띄우는 메소드 밑에 finish() 작성

6. 카메라 권한 후처리

FLAG_PERM_CAMERA -> {
	for (grnat in grantResults) {
    		if (grnat != PackageManager.PERMISSION_GRANTED) {
            		Toast.makeText(this, "카메라 권한을 승인해야지만 카메라를 사용할 수 있습니다.", Toast.LENGTH_LONG).show()
          	 }
 	}
}


3. MainActivity에서 카메라 앱 호출하기

Intent에 카메라 앱의 정보를 담아 새로운 Activity로 호출하면 카메라 앱의 촬영 화면을 호출할 수 있다.

* 자세한 내용은 '이것이 안드로이드다 with 코틀린' 참고



(☞゚ヮ゚)☞ [참고서적] 이것이 안드로이드다 with 코틀린 / 고돈호 / 한빛미디어
profile
Tyangpedia

0개의 댓글