Android (안드로이드)

[Android] 갤러리에서 이미지 불러오기

Oscar:) 2024. 11. 13. 21:54

 

 

 

기기 내 갤러리 앱에서 이미지를 불러오는 방법을 알아보자.

 

Intent를 사용하여 불러온 이미지를 ImageView에 띄워본다.

 

※ API LEVEL 33 ↑ 기준으로 포스팅한다.

 

 

 


 

 

✅ Manifest 파일에 권한 추가

 

갤러리에 접근해야 하기 때문에 권한을 추가해주자.

 

AndroidManifest.xml

<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>

 

 

 

 

✅ Permission 요청 세팅

 

갤러리에 접근하기 전에, Manifest에 추가해줬던 권한을 사용자에게 요청해준다.

TedPermission 라이브러리를 활용하여 간편하게 권한을 요청해주자.

 

private fun checkPermission() {
	TedPermission.create()
		.setPermissionListener(object : PermissionListener {
			override fun onPermissionGranted() {
				selectImage()
			}
			override fun onPermissionDenied(deniedPermissions: List<String>) {
				Log.d(TAG, "onPermissionDenied: 권한 거부됨")
			}
		})
		.setDeniedMessage("권한을 허용해 주셔야\n사용 가능합니다.")
		.setPermissions(android.Manifest.permission.READ_MEDIA_IMAGES)
		.check()
}

 

selectImage() 함수에 갤러리에 접근하는 코드를 작성할 것이다.

 

 

 

 

✅ 갤러리에서 이미지 불러오기

 

Intent를 사용하여 간편하게 갤러리에서 이미지를 불러올 수 있다.

 

class Activity: AppCompatActivity() {

	lateinit var launcher: ActivityResultLauncher<Intent>
	...

	override fun onCreate() {
    	launcher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
            if (it.resultCode == RESULT_OK) {
                bind.imageview.setImageURI(it.data?.data)
            }
        }
    }
    
    
    fun selectImage() {
    	launcher.launch(Intent().apply {
        	type = "image/*"
        	action = Intent.ACTION_PICK
        })
    }
    
    ...
	
}

 

 

Intent의 type, action을 위와 같이 지정해주고,

전역 변수로 선언한 ActivityResultLauncher.launch() 함수의 파라미터로 넘겨준다.

 

 

그리고 onCreate() 에서 launcher 초기화 하는 부분을 보자.

it은 ActivityResult를 의미한다.

 

갤러리에서 이미지를 골랐다면 RESULT_OK 반환되고,

뒤로가기를 눌러서 Intent를 취소하면 resultCode는 RESULT_CANCELED 반환되므로,

조건문을 통해 예외처리를 해주었다.

 

ActivityResult.data?.data는 URI 형식의 데이터이므로

ImageView.setImageURI() 함수의 파라미터로 URI를 작성해주자.

 

 

 

 

✅ 결과

 

● 기본 UI

 

 

이미지를 띄울 ImageView와 갤러리로 이동하기 위한 Button만 세팅했다.

 

 

 

● 권한 요청되는 모습

 

 

버튼을 누르면 TedPermission으로 권한이 요청된 모습이다.

 

 

 

● 갤러리로 이동된 모습

 

 

권한을 허용해주면 곧바로 갤러리로 이동된다.

필자 개인 폰이기에 열심히 가려놓았다.

 

 

 

● 이미지 골랐을 때 ImageView에 띄워진 모습

 

 

이미지를 선택하면 자동으로 갤러리에서 본 앱으로 이동된다.

 

ImageView.setImageURI() 함수로 이미지를 띄운 모습이다.

맛있는 초밥이 나타났다:)

 

 

 

 

✅ 번외

 

Intent의 action을 ACTION_PICK 이 아닌,

ACTION_GET_CONTENT 로 지정하면

 

 

위와 같이 바텀 시트 형식의 UI가 등장한다.

 

상황에 따라 마음에 드는 action을 사용하면 된다.

 

 

 

 


 

 

 

갤러리에 접근해서 이미지를 가져오는 방법을 알아보았다.

 

 

약 2년전에 처음 공부 했던 내용이지만, 지금 봐도 어려운 내용은 전혀 없고

Intent를 다양하게 사용할 수 있다는 것을 인지하는 것이 더 큰 공부였다고 생각한다.