[kotlin] 갤러리에서 이미지 가져오기

Kotlin을 이용한 앱개발 중 프로필사진을 설정하기 위한 갤러리 이미지 접근이 필요했다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
imageResult = registerForActivityResult( //oncreate에서만 정의가능 -> 모듈화 불가능
            ActivityResultContracts.StartActivityForResult()
        ){
            result ->
            if(result.resultCode == RESULT_OK){ // 이미지를 선택하면..
                progressOff()
                //uri형태로 받아온 데이터 저장
                val imageUri = result.data?.data
                imageUri.let{
                    imageFile = File(getRealPathFromURI(it!!)) //서버 업로드를 위한 파일형태 변경
                    Glide.with(this//이미지 적용
                        .load(imageUri)
                        .circleCrop()
                        .into(findViewById(R.id.profileImage))
                }
            }else { //갤러리창에서 뒤로가기할 시
                progressOff()
            }
        }
cs

먼저 해당 코드를 작성하였다. 해당코드는 갤러리에서 이미지를 불러왔을 시 Glide를 통하여 이미지를 적용하는 코드이다.

해당 코드에서 progressOff함수는 이미지를 선택하려 갤러리에 접근 시 실행되는 어플 조작방지 로딩바를 종료시키는 코드이다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private fun selectGallery(){
        progressOn()
        val readPermission = ContextCompat.checkSelfPermission(this,
        android.Manifest.permission.READ_EXTERNAL_STORAGE)
 
        if(readPermission == PackageManager.PERMISSION_DENIED) { //권한이 없을 시 권한 요청
            ActivityCompat.requestPermissions(
                this,
                arrayOf(android.Manifest.permission.READ_EXTERNAL_STORAGE), REQ_GALLERY
            )
        }else{
            //권한이 있을 경우 갤러리 실행
            val intent = Intent(Intent.ACTION_PICK)
            intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
            "image/*")
            imageResult.launch(intent)
        }
    }
cs

해당 함수는 갤러리에 접근하는 함수이다. 먼저 갤러리 접근시 어플조작을 방지하기 위해 progressOn함수를 실행시킨다. 

이후 권한을 읽어들여 권한이 없을 시 요청하고 있을 시 갤러리를 실행시킨 후 데이터를 받아온다.

이미지 선택 전

 

이미지 선택 후