startIntentSenderForResult已废弃,Fragment中应用内更新如何获取onActivityResult回调
Fragment中应用内更新废弃
startIntentSenderForResult的回调实现方案 现在startIntentSenderForResult已被官方Activity Result API替代,针对AppUpdateManager的调用场景可按以下步骤改造:
- 首先保证依赖版本达标,
com.google.android.play:core-ktx版本需≥1.10.0,该版本开始支持Activity Result API的调用重载 - 在Fragment中全局注册更新请求的启动器,直接作为成员变量初始化即可:
private val appUpdateLauncher = registerForActivityResult(ActivityResultContracts.StartIntentSenderForResult()) { result -> // 此处替换你原来onActivityResult中的更新逻辑即可 when (result.resultCode) { Activity.RESULT_OK -> { // 用户确认更新,后续业务处理 } Activity.RESULT_CANCELED -> { // 用户取消更新,后续业务处理 } ActivityResult.RESULT_IN_APP_UPDATE_FAILED -> { // 更新流程异常失败,后续业务处理 } } }
- 替换原有的
startUpdateFlowForResult调用参数:
appUpdateManager.startUpdateFlowForResult( info.result, AppUpdateType.FLEXIBLE, appUpdateLauncher, // 替换原来的fragment::startIntentSenderForResult参数 flexibleAppUpdateReqCode // 该参数目前已无实际作用,传任意合法int值即可 )
注意:
registerForActivityResult必须在Fragment生命周期走到onStart之前完成注册,禁止在点击事件、异步回调等时机执行注册操作,否则会抛出运行时异常。
改造完成后无需再重写Fragment的onActivityResult方法,所有更新结果逻辑都放在启动器的回调块中处理即可。
内容的提问来源于stack exchange,提问作者Ali
相关产品推荐
相关产品推荐

