안드로이드 / android 13 photo picker 사용방법
사용 배경
기존에 사용하던 Image picker+crop 라이브러리가 android13의 일부 기종에서만 갤러리를 못가지고 왔다.
android13 대응이 되어있지 않은 라이브러리라, 해당 라이브러리 사용이 더이상 힘들었다.
원하는 Image picker+crop 라이브러리가 딱히 없어서,
android13부터 등장한 photo picker를 적용하고, crop라이브러리를 따로 사용했다.
crop 라이브러리 적용기는 하단 링크에서~
https://dev-ej2.tistory.com/81
photo picker
이렇게 ui까지 제공해주는 갤러리내 photo picker이다.
바텀시트로 되어있어 UI가 따로 놀지 않고, 사용도 간편하다.
사용방법
1. app 수준 gradle에 androidx.anctivity를 추가해준다.
// build.gradle
implementation "androidx.activity:activity-ktx:1.7.0"
2. registerForAcitivityResult를 사용하여 이미지 선택 결과를 콜백받는다.
이미지를 하나만 선택하면 돼서, PickVisualMedia.ImageOnly를 사용했다.
uri를 받아와서, 원하는 로직대로 사용하면 된다.
private val pickMedia = registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
// Callback is invoked after the user selects a media item or closes the
// photo picker.
if (uri != null) {
// uri 사용
} else {
Log.d("PhotoPicker", "No media selected")
}
}
3. 안드로이드13 이상일 경우에만 해당 이미지피커를 사용하기 위해 조건문을 추가해주었다.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
pickMedia.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
}else{
// 다른 picker 사용
}
++) 비디오 선택, 여러 항목 미디어 선택 방법
이미지와 비디오를 선택할 경우는 다음과 같이 사용하면 된다.
// Include only one of the following calls to launch(), depending on the types
// of media that you want to let the user choose from.
// Launch the photo picker and let the user choose images and videos.
pickMedia.launch(PickVisualMediaRequest(PickVisualMedia.ImageAndVideo))
// Launch the photo picker and let the user choose only videos.
pickMedia.launch(PickVisualMediaRequest(PickVisualMedia.VideoOnly))
// Launch the photo picker and let the user choose only images/videos of a
// specific MIME type, such as GIFs.
val mimeType = "image/gif"
pickMedia.launch(PickVisualMediaRequest(PickVisualMedia.SingleMimeType(mimeType)))
여러 미디어 항목을 선택할 경우는 PickMultipleVisualMedia()안에 원하는 숫자를 넣어주면 된다.
// Registers a photo picker activity launcher in multi-select mode.
// In this example, the app lets the user select up to 5 media files.
val pickMultipleMedia =
registerForActivityResult(PickMultipleVisualMedia(5)) { uris ->
// Callback is invoked after the user selects media items or closes the
// photo picker.
if (uris.isNotEmpty()) {
Log.d("PhotoPicker", "Number of items selected: ${uris.size}")
} else {
Log.d("PhotoPicker", "No media selected")
}
}
// For this example, launch the photo picker and let the user choose images
// and videos. If you want the user to select a specific type of media file,
// use the overloaded versions of launch(), as shown in the section about how
// to select a single media item.
pickMultipleMedia.launch(PickVisualMediaRequest(PickVisualMedia.ImageAndVideo))
공식문서도 잘 나와있고, 사용법도 간단해서 금방 적용할 수 있었다.
https://developer.android.com/training/data-storage/shared/photopicker?hl=ko