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)
在过去的几天里,我正在尝试实现即时应用内更新功能,它工作正常,但我似乎无法处理结果代码(例如用户取消更新)在片段中 - 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)