【问题标题】:onActivityResult() deprecated for AppCompatActivityAppCompatActivity 不推荐使用 onActivityResult()
【发布时间】:2021-04-01 04:44:11
【问题描述】:

我正在为 Android 使用 应用内更新,作为 per the documentation,他们使用 onActivityResult 来处理应用行为,以防更新中断。

这是从我的片段中调用的函数:

private fun startImmediateUpdate(appUpdateInfo: AppUpdateInfo) {
    appUpdateManager.startUpdateFlowForResult(
        appUpdateInfo,
        AppUpdateType.IMMEDIATE,
        requireActivity(),
        Constants.CODES.APP_UPDATE_REQUEST_CODE
    )

}

这就是我在父活动中处理结果的方式

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    when (requestCode) {
        Constants.CODES.APP_UPDATE_REQUEST_CODE -> {
            if (resultCode != RESULT_OK || resultCode == RESULT_CANCELED || resultCode == ActivityResult.RESULT_IN_APP_UPDATE_FAILED) {
                //Do whatever i want to
            }
        }
    }
    super.onActivityResult(requestCode, resultCode, data)
}

现在 super.onActivityResult(requestCode, resultCode, data) 已被弃用。 目前一切正常,但我担心应用程序如果完全消失会崩溃

如何替换 onActivityResult()?我查看了 registerForActivityResult() 但找不到适合我用例的任何内容。

【问题讨论】:

标签: android kotlin onactivityresult


【解决方案1】:

新方法

    appUpdateInfoTask.addOnSuccessListener { appUpdateInfo ->
        if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
            && (appUpdateInfo.clientVersionStalenessDays() ?: -1) >= 2
            && appUpdateInfo.updatePriority() >= updatePriority
            && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)
        ) {
            appUpdateManager.startUpdateFlowForResult(
                appUpdateInfo,
                AppUpdateType.IMMEDIATE,
                this,
                updateCode
            )
            openActivityForResult()
        }
    }
}

private fun openActivityForResult(){
    resultUpdate.launch(Intent(this, MainActivity::class.java))
}

var resultUpdate = registerForActivityResult(ActivityResultContracts.StartActivityForResult()){ result->
    if (result.resultCode != Activity.RESULT_OK){
        Toast.makeText(
            this,
            "App Update failed, please try again on the next app launch.",
            Toast.LENGTH_SHORT
        ).show()
    }
}

【讨论】:

  • 感谢您的建议。不过,正如 Anders Ullnæss 上面所写,我正在等待 ActivityResultLauncher 对新 API 的官方支持。
【解决方案2】:

我有同样的问题,我发现一种可能性是改写为使用startUpdateFlow call

就我个人而言,我认为这不值得做,所以我将忽略这个具体的弃用警告,并等待/希望 Android/Google 制定一种方法,我们可以通过 ActivityResultLauncher 代替。

【讨论】:

  • 截至 21 年 12 月 22 日,谷歌没有更新,但他们希望我们以 sdk 30 为目标并使用 scopedstorage 等等
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-22
  • 2012-11-14
  • 2019-11-08
  • 2019-11-08
  • 2020-01-03
相关资源
最近更新 更多