從 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