Android Q에서 카메라 캡쳐 이미지 저장

Seok-woo Kim·2021년 1월 21일
0

안드로이드

목록 보기
3/9

1. Android Q에서부터 Scoped Storage 강제

범위 저장소가 Android Q에서 부터 강제되면서 공용 저장소에 사진을 저장하기 위해선 경로가 아닌 Uri를 사용해야한다.

2. 코드

private fun captureImageFromCamera() {
        Intent(MediaStore.ACTION_IMAGE_CAPTURE).also {intent ->
            intent.resolveActivity(packageManager)?.also {
                intent.putExtra(MediaStore.EXTRA_OUTPUT, getSavedImageUri())     // 카메라 인텐트로 이미지를 저장할 Uri를 넘겨줌
                startActivityForResult(intent, REQUEST_CAPTURE_PHOTO)
            }
        }
    }
    
// MediaStore를 통해 공용저장소의 경로 대신 Uri를 획득  (Ex DCIM, Picture 등 폴더 및 하위)
private fun getSavedImageUri(): Uri? {
        val timeStamp: String = SimpleDateFormat("yyyyMMdd_HHmmss").format(Date())
        val name = "JPEG_${timeStamp}_"

        val contentValues = ContentValues()
        contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, "$name.jpg")
        contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "image/jpg")
        contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, "${Environment.DIRECTORY_DCIM}/Camera")

        return contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues)
    }

captureImageFromCamera() 메서드 안에서처럼 카메라 인텐트를 시작하기 전에 Uri를 넘겨준다.

profile
안드로이드 개발자 (6년 ~ )

0개의 댓글