본문 바로가기

Android/개념 및 예제

[Android] 갤러리에서 사진 가져오기 - 기본 갤러리 앱 사용하기

반응형

안드로이드 앱에서 기존 사진을 가져오는 방법으로 다음 두 가지가 있습니다. 

1. 기본 갤러리 앱 사용

2. 커스텀 갤러리 화면 만들기

 

이번에는 기본 갤러리 앱을 사용해 사진을 가져오도록 해보겠습니다.

암시적 Intent를 사용하면 쉽게 갤러리 앱을 사용할 수 있습니다.

 

1.  기본 갤러리 앱 실행

Intent 객체를 생성하고 갤러리 액티비티 실행하기 위한 정보를 Setting 합니다.

startActivityForResult의 두 번째 인자로 나중에 확인을 위한 request Code 값을 넣습니다.

 private fun startDefaultGalleryApp() {
        val intent = Intent()
        intent.type = "image/*"
        intent.action = Intent.ACTION_GET_CONTENT
        startActivityForResult(intent, DEFAULT_GALLERY_REQUEST_CODE)
}

 

2. 갤러리 앱 실행 결과 처리하기 

// 갤러리 화면에서 이미지를 선택한 경우 현재 화면에 보여준다.
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

        if (resultCode != Activity.RESULT_OK) {
            return
        }

        when (requestCode) {
            DEFAULT_GALLERY_REQUEST_CODE -> {
                data?:return
                val uri = data.data as Uri
               	// 이미지 URI를 가지고 하고 싶은거 하면 된다.
            }

            else -> {
                Toast.makeText(this, "사진을 가져오지 못했습니다.", Toast.LENGTH_SHORT).show()
            }
        }
    }

갤러리 액티비티로부터 결과 데이터를 처리하기 위해서는 onActivityResult() 함수를 오버 라이딩합니다.

해당 함수의 인자는 3개입니다.

첫 번째 인자 RequestCode는 startActivityForResult() 함수의 두 번째 인자로 넘겨줬던 값과 동일한 값이 넘어옵니다.
두 번째 인자는 resultCode로 사진을 정상적으로 선택하였다면 RESULT_OK 값이 넘어오며 뒤로 가기 버튼으로 작업을 취소한 경우 RESULT_CANCELED 값이 넘어옵니다. 해당 코드값을 확인하여 액티비티에서 적절한 처리를 해주면 됩니다.

마지막 세 번째 인자로 갤러리 액티비티로부터 넘어온 결과 데이터가 담겨있는 Intent 객체입니다.

 

결론 : 커스텀 갤러리 화면을 만들자!

구현 로직이 간단한 것을 알 수 있습니다. 실제 유명 서비스(카카오톡, 페북, 인스타...)의 경우 이렇게 기본 갤러리 앱을 사용하는 경우는 거의 없는데요. 서비스 성격에 맞게 각각의 갤러리 화면을 만들어서 사용합니다.

다음 편에서는 커스텀 갤러리 화면을 만들어 보겠습니다.

 

기본 갤러리, 커스텀 갤러리 전체 소스를 확인할 수 있습니다.

https://github.com/keepseung/Android-Blog-Source

 

GitHub - keepseung/Android-Blog-Source: https://develop-writing.tistory.com/ 에서 제공하는 예제

https://develop-writing.tistory.com/ 에서 제공하는 예제. Contribute to keepseung/Android-Blog-Source development by creating an account on GitHub.

github.com

 

반응형