Activity
应用基础 · androidx.activity
Activity Result:输入输出契约1.14.0-alpha01
用 ActivityResultContract、launcher 和回调建立可测试的结果流。
最后更新 2026-07-31
数据流
ActivityResultContract<I, O> 描述输入 I 和输出 O,registerForActivityResult 注册回调并返回 launcher,最后由 launch(input) 发起操作。
private val pickImage = registerForActivityResult(
ActivityResultContracts.GetContent()
) { uri ->
// uri: Uri?
}
fun openPicker() {
pickImage.launch("image/*")
}这比手动维护整数 requestCode 更强:契约让类型、Intent 构造和结果解析集中在一起,ActivityResultRegistry 还能在测试中被替换。
Compose 中使用
launcher 必须在组合过程中无条件创建;点击时只调用 launch。
val launcher = rememberLauncherForActivityResult(
ActivityResultContracts.TakePicturePreview()
) { bitmap ->
preview = bitmap
}
Button(onClick = { launcher.launch() }) {
Text("拍照")
}不要在 onClick 内调用 rememberLauncherForActivityResult,因为 remember API 只能处于 Composition。
常用内置契约
RequestPermission:String → BooleanGetContent:MIME type →Uri?StartActivityForResult:Intent → ActivityResultTakePicturePreview:无输入 → 缩略Bitmap?