NoneJava .lang.reflect.InvocationTargetException при неподтверждении Android, если повторная попытка

Шаги для воспроизведения этой ошибки:

  1. Нажмите кнопку обновления, чтобы открыть диалоговое окно обновления приложения, так как оно AppUpdateType.FLEXIBLE,
  2. Нажмите No, thanks
  3. Попробуйте обновить еще раз. Приложение вылетает со следующей ошибкой:

Я получаю это исключение при обновлении приложения через 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

Другие вопросы по тегам