Android Compose 使用 照片选择器 Photo Picker
从 Android 13(Tiramisu, API 33)开始,官方提供了系统级图片选择器 Photo Picker。而且无需申请权限,只需几行代码即可轻松接入。效果如下图:
在不支持 Photo Picker 的低版本机型中,该库会自动调用 ACTION_OPEN_DOCUMENT
打开系统资源管理器进行选择,问题也不大。
官方介绍 and 教程:Photo picker
1. androidx.activity 1.6.0+
首先把 androidx.activity 升级到最新版本:
dependencies {
implementation 'androidx.activity:activity-compose:1.9.0'
}
如果因为各种原因,不能升级依赖版本,参考该文 浅尝 Android 13 Photo Picker 无惧权限烦恼
2. Compose 使用组件
@Composable
fun xxxCollectScreen(
xxxViewModel: xxxViewModel,
appNavController: NavController,
modifier: Modifier,
) {
//......
val pickMultipleMedia = rememberLauncherForActivityResult(
//设置一个值允许选择照片的,且最多选择5个照片的照片选择器
ActivityResultContracts.PickMultipleVisualMedia(5)) { uris ->
if (uris.isNotEmpty()) {
//逻辑代码,uris是用户选择的媒体文件的Uri( List<Uri> )
//按照实际场景再处理即可
}
}
//......
Row {
// begin Photo Picker region
TextButton(onClick = {
coroutineScope.launch {
//只选照片 ActivityResultContracts.PickVisualMedia.ImageOnly
pickMultipleMedia.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
}
}) {
Icon(
Icons.Filled.PhotoLibrary,
null
)
Spacer(Modifier.size(ButtonDefaults.IconSpacing))
Text("Add photo")
}
// end region
}
//......
}
3.各种 Photo Picker介绍
官方介绍 and 教程:Photo picker