AppCompatActivity 不推荐使用 onActivityResult()
Posted
技术标签:
【中文标题】AppCompatActivity 不推荐使用 onActivityResult()【英文标题】:onActivityResult() deprecated for AppCompatActivity 【发布时间】: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() 但找不到适合我用例的任何内容。
【问题讨论】:
OnActivityResult method is deprecated, what is the alternative?。你应该按照Getting a result from an activity @Onik 我没有自己开始任何活动。它是 appUpdateManager 使用的内置函数,虽然工作方式与 startActivityForResult() 类似,但我只想处理结果。我自己没有启动任何东西。 查看谷歌文档:developer.android.com/training/basics/intents/result#separate。也许会帮助你 @HashirAli 有更新吗? 目前没有任何积极的结果。 【参考方案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 等等以上是关于AppCompatActivity 不推荐使用 onActivityResult()的主要内容,如果未能解决你的问题,请参考以下文章
程序包androidx.support.annotation不存在/import androidx.v7.app.AppCompatActivity;报错
supportRequestWindowFeature(AppCompatActivity)
supportRequestWindowFeature(AppCompatActivity)
supportRequestWindowFeature(AppCompatActivity)
错误: 程序包android.support.v7.app不存在 import android.support.v7.app.AppCompatActivity