使用ActivityResultLauncher替换startActivityForResult

Android示例项目集合
2022-07-06 14:24 · 阅读时长6分钟
小课

在Android开发中,我们经常使用startActivityForResult来获取activity执行完操作的返回值,但是在新版本的AndroidX中已经推荐使用Activity Result API来替换它。

startActivityForResult和onActivityResult使用方法
加载中...

ActivityResultLauncher的使用用法

加载中...

以上是ActivityResultLauncher最简单的用法,直接使用StartActivityForResult作为约定,在实际开发中,使用ActivityResultLauncher分为三步。

  1. 实现ActivityResultContract接口,创建输入输出约定。
  2. 使用registerForActivityResult注册约定,返回ActivityResultLauncher对象。
  3. 使用ActivityResultLauncher对象启动Activity。

如果要使用ActivityResultLauncher,首先需要引入依赖库,最新版本参考官方文档

加载中...
第一步:创建约定

比如说,我们在启动Activity时需要传入Int类型的参数,在执行完Activity之后得到String类型结果,我们可以这样创建约定。

加载中...

这样其实是把封装和解析Intent的工作摘出来了,减轻Activity的工作量,遵循了单一职责原则。

第二步:注册约定

使用registerForActivityResult方法注册上一步创建的约定,并且传入一个ActivityResultCallback回调,用于处理Activity处理之后返回的结果。

加载中...
第三步:按约定启动

我们只需要调用第二步创建的activityLauncher.launch(..)方法即可启动Activity,并且传入我们指定的Int类型的参数。

加载中...

另外,它还可以用来简化申请运行时权限,我们可以使用RequestPermission和RequestMultiplePermissions约定来申请单个或多个运行时权限,比如申请相机权限,这部更多内容可以参考官方文档

加载中...

下面是一个完整的示例项目。

文件大小修改时间
app
2022年07月06日
build.gradle
357 B 2022年07月06日
gradle/wrapper
2022年07月06日
gradle.properties
1 kB 2022年07月06日
gradlew
6 kB 2022年07月06日
gradlew.bat
3 kB 2022年07月06日
local.properties
437 B 2022年07月06日
settings.gradle
331 B 2022年07月06日
androidActivityResultLauncherstartActivityForResultonActivityResult