You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

InAppUpdate已弃用:如何解决activityResultLauncher相关问题?

解决InAppUpdate中activityResultLauncher的使用问题

1. 注册ActivityResultLauncher

在你的Activity或Fragment中,先注册用于接收应用更新结果的ActivityResultLauncher,使用ActivityResultContracts.StartIntentSenderForResult()适配AppUpdate的启动需求:

// 在Activity类中定义全局变量
private lateinit var appUpdateResultLauncher: ActivityResultLauncher<IntentSenderRequest>

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    // 初始化Launcher并处理更新结果
    appUpdateResultLauncher = registerForActivityResult(ActivityResultContracts.StartIntentSenderForResult()) { result ->
        when (result.resultCode) {
            RESULT_OK -> {
                // 更新成功完成,可执行重启应用、提示用户等后续操作
            }
            RESULT_CANCELED -> {
                // 用户主动取消更新
            }
            ActivityResult.RESULT_IN_APP_UPDATE_FAILED -> {
                // 更新失败,可选择重试或给用户提示
            }
        }
    }

    // 触发应用更新检查
    checkForAvailableUpdate()
}

2. 配合AppUpdateManager启动更新流程

检查到可用更新后,将注册好的Launcher传入新的更新方法,替代已弃用的startUpdateFlowForResult逻辑:

private fun checkForAvailableUpdate() {
    val appUpdateManager = AppUpdateManagerFactory.create(this)
    val appUpdateInfoTask = appUpdateManager.appUpdateInfo

    appUpdateInfoTask.addOnSuccessListener { appUpdateInfo ->
        // 处理立即更新场景
        if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
            && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)
        ) {
            appUpdateManager.startUpdateFlowForResult(
                appUpdateInfo,
                appUpdateResultLauncher,
                AppUpdateOptions.newBuilder(AppUpdateType.IMMEDIATE).build()
            )
        }
        // 处理灵活更新场景
        else if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
            && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)
        ) {
            appUpdateManager.startUpdateFlowForResult(
                appUpdateInfo,
                appUpdateResultLauncher,
                AppUpdateOptions.newBuilder(AppUpdateType.FLEXIBLE).build()
            )
        }
    }
}

关键注意点

  • 必须在onCreate生命周期内完成Launcher注册,避免因生命周期时序问题导致无法接收结果。
  • 灵活更新需额外监听更新状态,在下载安装完成后调用appUpdateManager.completeUpdate()完成最终更新流程。
  • 需覆盖更新不可用、用户拒绝更新等异常场景,优化用户体验。

内容的提问来源于stack exchange,提问作者taolao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 09:32:50