首先第一步,我们对 Launcher 对象做一个封装, 把 ActivityResultCallback回调方法在 launch 方法中调用。 /** *对Result-Api的封装,支持各种输入与输出,使用泛型定义 */ @SuppressWarnings("unused") public class BaseResultLauncher<I, O> { private final androidx.activity.result.ActivityResultLauncher<I> la...
*/Toast.makeText(this@ForResultActivity,"result:${it}",Toast.LENGTH_SHORT).show()}.launch(Manifest.permission.ACCESS_FINE_LOCATION) 是不是一下子简洁了很多,有木有,哈哈 正文 TKPermission是基于AndroidX Activity Result API封装的权限类库,摆脱了旧的繁琐的权限申请方式,让权限申请变得无比简单轻松 功能...
上节《【Jetpack】学穿:Activity Results API》说过,在重构公司项目的BaseFragment时,遇到onRequestPermissionResultDeprecated的问题,顺带系统地学了一波Activity Results API相关的姿势。 项目中,把申请权限相关的操作都塞到BaseActivity/BaseFragment中,可以,但不太优雅,很多子类Activity/Fragment被迫继承了这个用不到的功能。
接下来我们就来探讨如何在不封装BaseActvity的情况下只调用一个带回调的函数实现startActivityForResult/onActivityResult。 2 解决思路 非Activity Results API方案 其实早在Activity Results API问世前,我们项目中就有使用一个空视图GhostFragment作为中转回调的方案来实现。 大概的思路如下: Activty/Fragment——>add Gho...
在以前我们一直用的是ActivityCompat.requestPermissions()去申请权限和重写onRequestPermissionsResult()回调方法,对授权结果进行判断,执行后续操作。 但是目前这个方法已经过时了,在网上找了一圈,大部分都是老方法,于是就决定自己重写一套权限框架。 项目地址:https://github.com/Peakmain/BasicLibrary ...
首先,SecondActivity中的代码是不需要修改的。这部分代码并没有被废弃,Activity Result API也与它无关。 FirstActivity中的代码,我们需要使用Activity Result API来替代startActivityForResult()的写法,如下所示: 代码语言:javascript 复制 classFirstActivity:AppCompatActivity(){privateval requestDataLauncher=registerFor...
对 Activity Result API 的封装主要集中在简化创建方式和实现自动/按需注册。首先,通过封装简化了创建 Launcher 对象的过程,将回调方法整合到 launch 方法中,并提供了简化对象创建的方式。其次,实现了自动注册或按需注册的功能,包括定义基类以简化创建逻辑、使用懒加载方法以及通过 Kotlin 委托实现按需添加...
现在更加建议使用Activity Result API来实现在两个Activity之间交换数据的功能。 2. 传统写法 - 在两个Activity之间交换数据 如果想要在两个Activity之间交换数据,我们先回顾一下传统的写法: classFirstActivity:AppCompatActivity() {overridefunonCreate(savedInstanceState:Bundle?){super.onCreate(savedInstanceState) ...
③ ActivityResultCallback → 结果回调 第二个入参,见名知意:启动Activity并返回当前Activity时的 结果回调。 就定义了一个回调方法,Activity Result API 又是 模版方法模式 封装的思想体现,开发仔按需注入 协定类型 和 结果回调 即可,无需关注底层细节。巴适得很!
Activity Result API 密法 背景 笔者最近在做hybird开发,H5Fragment/H5Activity作为外层容器,它不会有任何业务代码,所有的jsbridge代码分散到不同NativeModule中,例如获取拍照,相册,权限申请等, 这就需要用到startActivityForResult或registerForActivityResult来提供获取返回值的能力,但startActivtyForResult不好用被废弃了...