简介:介绍 `registerForActivityResult` 方法的使用,包括其基本概念、使用场景、实现步骤以及注意事项。
在 Android 开发中,registerForActivityResult 是一个方便的方法,用于处理 Activity 返回的结果。它是在 AndroidX 库中引入的,用于替代旧的 startActivityForResult 和 onActivityResult 方法。registerForActivityResult 方法提供了更简洁、更灵活的方式来处理 Activity 之间的结果传递。
基本概念:registerForActivityResult 方法接受两个参数,第一个参数是 ActivityResultLauncher 对象,用于注册一个 Activity 请求的结果;第二个参数是一个 lambda 表达式或匿名函数,定义了请求 Activity 的逻辑。
使用场景:
使用 registerForActivityResult 的常见场景是在 Activity 中启动另一个 Activity,并需要获取返回的结果。例如,从相册选择图片、从地图选择位置等。
实现步骤:
ActivityResult 和 ActivityResultLauncher 类。ActivityResultLauncher 实例。registerForActivityResult 方法注册 Activity 请求的结果。ActivityResultLauncher 的 launch 方法启动 Activity。setResult 方法将结果传递回原始 Activity。onActivityResult 方法,处理从返回的 Activity 获取的结果。registerForActivityResult 时,要确保在 Activity 的生命周期内正确注销结果,以避免内存泄漏。可以使用 unregister 方法来注销结果。registerForActivityResult 时,返回的 Activity 必须调用 setResult 方法来传递结果,否则原始 Activity 将无法获取到结果。onActivityResult 方法来处理多个不同的 Activity 请求结果。registerForActivityResult 方法来启动一个选择图片的 Activity,并获取返回的图片数据:
import androidx.activity.result.ActivityResult;import androidx.activity.result.ActivityResultLauncher;import androidx.activity.result.contract.ActivityResultContract;import androidx.appcompat.app.AppCompatActivity;import androidx.core.app.ActivityCompat;import androidx.core.content.FileProvider;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.provider.MediaStore;import java.io.File;import java.io.IOException;import java.nio.file.Files;import java.nio.file.StandardCopyOption;