Android:使用应用内更新时不调用片段 onActivityResult()

Android: Fragment onActivityResult() isn't called when using In-app update

在过去的几天里,我正在尝试实现即时应用内更新功能,它工作正常,但我似乎无法处理结果代码(例如用户取消更新)在片段中 - onActivityResult() 因为根本没有调用该方法。

经过一些摆弄我意识到,在拒绝更新后,onActivityResult() 被调用,但是对于父 activity,而不是我需要处理结果的片段,这是有道理的。

我使用的是默认示例中的代码,这只是一个片段摘录,因为代码包含在 Rx 观察器逻辑中。

appUpdateManager.appUpdateInfo.addOnSuccessListener { appUpdateInfo ->
if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
    && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)) {
    appUpdateManager.startUpdateFlowForResult(appUpdateInfo, AppUpdateType.IMMEDIATE,
        fragment.activity, UPDATER_REQUEST_CODE)
}


// Trying to handle the in-app update activity result in here with no luck
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (requestCode == UPDATER_REQUEST_CODE) {
        // Log onActivityResult() result code
    }
}

是否有人偶然发现了同样的问题?

非常感谢大家。

我在深入研究文档后找到了解决方案,其中指出,应该使用具有不同参数的方法 startUpdateFlowForResult()。

https://developer.android.com/reference/com/google/android/play/core/appupdate/AppUpdateManager

This method should be called if you are starting the flow from a Component different from an Activity and you don't want to receive the onActivityResult call on the Activity.

For example, you can use it for androidx.fragment.app.Fragment:

所以诀窍就是使用这个

startUpdateFlowForResult(appUpdateInfo, AppUpdateType.IMMEDIATE, fragment::startIntentSenderForResult, UPDATER_REQUEST_CODE)

而不是这个

startUpdateFlowForResult(appUpdateInfo, AppUpdateType.IMMEDIATE, fragment.activity, UPDATER_REQUEST_CODE)