InAppUpdates中startUpdateFlowForResult用什么替代已废弃的onActivityResult回调?
替代方案:使用官方 Activity Result API
Google 官方已推荐使用 Activity Result API 完全替代废弃的 onActivityResult 方法,适配 InAppUpdates 的具体实现步骤如下:
步骤1:提前注册更新流程结果回调启动器
需要在 Activity/Fragment 生命周期进入 STARTED 状态前完成启动器注册,通常放在 onCreate 方法中执行:
Kotlin 示例
private val updateFlowLauncher = registerForActivityResult(ActivityResultContracts.StartIntentSenderForResult()) { result -> when (result.resultCode) { RESULT_OK -> { // 用户确认更新,更新流程正常启动,可按需添加后续逻辑 } RESULT_CANCELED -> { // 用户主动取消更新,可做降级提示、重新触发更新等处理 } else -> { // 更新流程启动异常,可添加错误上报、兜底跳转应用商店等逻辑 } } }
Java 示例
private ActivityResultLauncher<IntentSenderRequest> updateFlowLauncher = registerForActivityResult( new ActivityResultContracts.StartIntentSenderForResult(), result -> { int resultCode = result.getResultCode(); if (resultCode == Activity.RESULT_OK) { // 用户确认更新,更新流程正常启动 } else if (resultCode == Activity.RESULT_CANCELED) { // 用户主动取消更新 } else { // 更新流程启动异常 } } );
步骤2:启动更新时传入注册好的启动器
获取到 AppUpdateInfo 实例后,调用更新方法时直接传入上面注册的启动器,无需再传入自定义 requestCode:
Kotlin 示例
val updateOptions = AppUpdateOptions.newBuilder(AppUpdateType.IMMEDIATE) // 按需替换为 FLEXIBLE 灵活更新 .build() appUpdateManager.startUpdateFlow( appUpdateInfo, updateFlowLauncher, updateOptions )
Java 示例
AppUpdateOptions updateOptions = AppUpdateOptions.newBuilder(AppUpdateType.IMMEDIATE) .build(); appUpdateManager.startUpdateFlow(appUpdateInfo, updateFlowLauncher, updateOptions);
注意事项
- 启动器必须提前完成注册,禁止在点击事件等动态触发的逻辑中执行注册操作,否则会抛出生命周期异常
- 原有
onActivityResult中的结果判断逻辑可以直接复用,无需修改 - 该方案同时兼容即时更新、灵活更新两种模式的启动回调处理
内容的提问来源于stack exchange,提问作者NIKUNJ GARG
相关产品推荐
相关产品推荐

