Android Compose 使用 照片選擇器 Photo Picker

kingwzun發表於2024-07-26

從 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

相關文章