ActivityResultLauncher 使用教程

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),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值