Android Compose 使用 照片选择器 Photo Picker

从 Android 13(Tiramisu, API 33)开始,官方提供了系统级图片选择器 Photo Picker。而且无需申请权限,只需几行代码即可轻松接入。效果如下图:

image

在不支持 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

posted @ 2024-07-26 18:03  kingwzun  阅读(25)  评论(0编辑  收藏  举报