🏙️
[Android]Jetpack Composeでライブラリの画像選択を実装する覚え書き
PhotoPicker
を利用した実装と、昔ながらのGetContent
を利用した実装がある。
PhotoPicker
はストレージに保存されている画像しか選べない(Google Photoなどに保存されている画像から選ぶことはできない)が、ボトムシート状のUIのため、元の画面からシームレスに画像を選択することができる。
PhotoPicker
@Composable
fun Content(
onNothingSelected: () -> Unit
) {
var pickedImageUri by remember { mutableStateOf(Uri.EMPTY) }
val launcher = rememberLauncherForActivityResult(
ActivityResultContracts.PickVisualMedia()
) { uri: Uri? ->
uri?.let {
pickedImageUri = it
} ?: onNothingSelected()
}
LaunchedEffect(true) {
launcher.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
}
...
}
GetContent
Android 9(APIレベル28)以前ではREAD_EXTERNAL_STORAGE
のパーミッションが必要
@Composable
fun Content(
onNothingSelected: () -> Unit
) {
var pickedImageUri by remember { mutableStateOf(Uri.EMPTY) }
val launcher = rememberLauncherForActivityResult(
ActivityResultContracts.GetContent()
) { uri: Uri? ->
uri?.let {
pickedImageUri = it
} ?: onNothingSelected()
}
LaunchedEffect(true) {
launcher.launch("image/*")
}
...
}
Discussion