NoneJava .lang.reflect.InvocationTargetException при неподтверждении Android, если повторная попытка
Шаги для воспроизведения этой ошибки:
- Нажмите кнопку обновления, чтобы открыть диалоговое окно обновления приложения, так как оно
AppUpdateType.FLEXIBLE
, - Нажмите
No, thanks
- Попробуйте обновить еще раз. Приложение вылетает со следующей ошибкой:
Я получаю это исключение при обновлении приложения через inappupdate в следующей строке.
appUpdateManager?.startUpdateFlowForResult(it, AppUpdateType.FLEXIBLE, activity, REQUEST_CODE_FLEXI_UPDATE) //it == AppUpdateInfo object
Трассировки стека:
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:451)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:441)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)
Caused by: android.content.IntentSender$SendIntentException
at android.app.Activity.startIntentSenderForResultInner(Activity.java:4878)
at android.app.Activity.startIntentSenderForResult(Activity.java:4847)
at androidx.fragment.app.FragmentActivity.startIntentSenderForResult(FragmentActivity.java:796)
at android.app.Activity.startIntentSenderForResult(Activity.java:4814)
at androidx.fragment.app.FragmentActivity.startIntentSenderForResult(FragmentActivity.java:781)
at com.google.android.play.core.appupdate.b.startUpdateFlowForResult(Unknown Source:22)
at newProfile.NewProfileFragment.startForInAppUpdate(NewProfileFragment.kt:752)
at newProfile.NewProfileFragment.access$startForInAppUpdate(NewProfileFragment.kt:60)
at newProfile.NewProfileFragment$setupAppUpdate$3.onClick(NewProfileFragment.kt:682)
at android.view.View.performClick(View.java:6935)
at android.widget.TextView.performClick(TextView.java:12752)
at android.view.View$PerformClick.run(View.java:26214)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
Подробности:
Версия Android: 8.0
Телефон: Samsung J7
Обновить
Согласно документации,
startUpdateFlowForResult
должен вызываться только один разAppUpdateInfo
экземпляр. Для повторного вызова необходимо создатьAppUpdateInfo
экземпляр.
но так как его экземпляр зависит от условий ниже, как убедиться, что его экземпляр создан заново перед вызовом startUpdateFlowForResult
appUpdateManager?.appUpdateInfo?.addOnSuccessListener {
if (it.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE &&
it.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)) {
appUpdateInfo = it
updateAvailable.value = true
} else {
updateAvailable.value = false
}
}
Также, как получить значение прогресса загружаемого приложения, не удалось найти его в документации. В моем случае onActivityResult продолжает вызывать, но какой ключ дает значение прогресса?
Также сталкивается с другой проблемой с другим вариантом использования: после пропуска установки недоступно inappupdate
0 ответов
Проблема в том, что вы пытаетесь запустить startUpdateFlowForResult
с тем же AppUpdateInfo
дважды.
Как предложил @Slaw, после неудачного или отмененного обновления вам необходимо сделать appUpdateManager.appUpdateInfo.addOnSuccessListener
снова, чтобы иметь еще один экземпляр AppUpdateInfo
сделать второй звонок startUpdateFlowForResult