ActivityResultLauncher 使用教程
项目介绍
ActivityResultLauncher 是一个用于简化 Android 开发中 startActivityForResult 流程的新 API。它通过注册 contract 和 ActivityResultCallback 来启动和接收活动结果,提供更直观的流程管理。ActivityResultLauncher 是 Android 官方推荐的用来替代 startActivityForResult 的新方式,通过它可以非常方便地调用系统 Intent 进行拍照、选取本地文件等操作。
项目快速启动
1. 添加依赖
首先,在项目的 build.gradle 文件中添加以下依赖:
dependencies {
implementation 'androidx.activity:activity-ktx:1.2.0-alpha03'
}
2. 定义 ActivityResultLauncher
在需要调用系统 Intent 的 Activity 中定义 ActivityResultLauncher:
private val startForResult = registerForActivityResult(StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK) {
val intent = result.data
// 处理返回的 Intent
}
}
3. 使用 ActivityResultLauncher
在按钮点击事件中使用 ActivityResultLauncher 启动目标 Activity:
startButton.setOnClickListener {
startForResult.launch(Intent(this, ResultProducingActivity::class.java))
}
应用案例和最佳实践
1. 拍照并获取图片
使用 ActivityResultLauncher 调用系统相机拍照并获取图片:
private val takePicture = registerForActivityResult(TakePicturePreview()) { bitmap ->
// 处理返回的 Bitmap
}
takePictureButton.setOnClickListener {
takePicture.launch(null)
}
2. 选择文件
使用 ActivityResultLauncher 选择本地文件:
private val pickDocument = registerForActivityResult(GetContent()) { uri ->
// 处理返回的 Uri
}
pickDocumentButton.setOnClickListener {
pickDocument.launch("image/*")
}
典型生态项目
1. Jetpack Compose
ActivityResultLauncher 可以与 Jetpack Compose 结合使用,简化 Compose 中的 startActivityForResult 流程。
2. 权限申请
使用 ActivityResultLauncher 动态申请权限:
private val requestPermission = registerForActivityResult(RequestPermission()) { isGranted ->
if (isGranted) {
// 权限已授予
} else {
// 权限被拒绝
}
}
requestPermissionButton.setOnClickListener {
requestPermission.launch(Manifest.permission.CAMERA)
}
通过以上步骤,您可以快速上手并使用 ActivityResultLauncher 简化 Android 开发中的 startActivityForResult 流程。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



