Android множество ошибок java .lang.IllegalArgumentException Обновление в приложении - PullRequest
1 голос
/ 16 апреля 2020

Я реализовал In-App Update на Android.

Сегодня я опубликовал новую версию своего приложения, и у меня много ошибок в Play Console (+ 3K ошибок по этой причине сегодня! ).

Ошибка:

java .lang.IllegalArgumentException: на androidx.fragment.app.FragmentActivity.checkForValidRequestCode (FragmentActivity. java: 715) на androidx .fragment.app.FragmentActivity.startIntentSenderForResult (FragmentActivity. java: 702) на com.google. android .play.core.appupdate.d.startIntentSenderForResult (неизвестный источник: 9) на com.google. android. play.core.appupdate.b.startUpdateFlowForResult (неизвестный источник: 35) на странице com.google. android .play.core.appupdate.b.startUpdateFlowForResult (неизвестный источник: 5) на странице org.deiverbum.app.activities.MainActivity. lambda $ checkAppUpdate $ 1 $ MainActivity (MainActivity. java: 258) на сайте org.deiverbum.app.activities .- $$ Lambda $ MainActivity $ yZ2n4QRhF7BFdFURB2K2ok-2vu8.onSuccess (неизвестный источник: 4) 1039 на сайте com.google. .play.core.tasks.e.run (Неизвестный Соу rce: 27) в android .os.Handler.handleCallback (обработчик. java: 809) в android .os.Handler.dispatchMessage (обработчик. java: 102) в android .os.Looper .l * * тысяча сорок пять (Лупер * * тысяча сорок-шести:. 166) при * * .app.ActivityThread.main тысячи сорок семь (ActivityThread java:. 7555) при * * .lang.reflect.Method.invoke тысячи сорок-девять (Родной метод) при com. android .internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit. java: 469) на com. android .internal.os.ZygoteInit.main (ZygoteInit. java: 963)

cra sh происходит в строке 258: appUpdateManager.startUpdateFlowForResult(

Это мой код для обновления MainActivity:

private void checkAppUpdate() {
    appUpdateManager = AppUpdateManagerFactory.create(this);
    appUpdateManager.registerListener(installStateUpdatedListener);
    Task<AppUpdateInfo> appUpdateInfoTask = appUpdateManager.getAppUpdateInfo();
    appUpdateInfoTask.addOnSuccessListener(appUpdateInfo -> {
        if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
                && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)) {
            try {
                appUpdateManager.startUpdateFlowForResult(
                        appUpdateInfo,
                        AppUpdateType.FLEXIBLE,
                        this,
                        UPDATE_REQUEST_CODE);
            } catch (IntentSender.SendIntentException e) {
                e.printStackTrace();
            }
        }
    });
}

Этот метод называется от onCreate():

 protected void onCreate(Bundle savedInstanceState) {
     //...
     checkAppUpdate();
 }

У меня есть эти поля на MainActivty:

private static final int UPDATE_REQUEST_CODE = 20200100;
private AppUpdateManager appUpdateManager;
private InstallStateUpdatedListener installStateUpdatedListener = installState -> {
    if (installState.installStatus() == InstallStatus.DOWNLOADED) {
        popupAlerter();
    }
};

У меня также есть этот код, связанный с обновлением в приложении на MainActivity:

@Override
protected void onDestroy() {
    unregisterListener();
    super.onDestroy();
}

@Override
protected void onResume() {
    super.onResume();
    checkNewAppVersionState();
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == UPDATE_REQUEST_CODE) {
        if (resultCode != RESULT_OK) {
            Log.d(TAG, "Update flow failed! Result code: " + resultCode);

        }
    }
}

/*
  You should execute this check at all app entry points.
 */
private void checkNewAppVersionState() {
    appUpdateManager
            .getAppUpdateInfo()
            .addOnSuccessListener(new OnSuccessListener<AppUpdateInfo>() {
                @Override
                public void onSuccess(AppUpdateInfo appUpdateInfo) {
                    if (appUpdateInfo.installStatus() == InstallStatus.DOWNLOADED) {
                        popupAlerter();
                        Log.d(TAG, "checkNewAppVersionState(): resuming flexible update. Code: " + appUpdateInfo.updateAvailability());
                    }
                }
            });
}

private void popupAlerter() {
    Snackbar snackbar =
            Snackbar.make(
                    findViewById(android.R.id.content),
                    "Nueva versión descargada, por favor reinicia",
                    Snackbar.LENGTH_INDEFINITE);
    snackbar.setAction("REINICIAR", view -> appUpdateManager.completeUpdate());
    snackbar.setActionTextColor(
            getResources().getColor(R.color.colorAccent));
    snackbar.show();

}

private void unregisterListener() {
    if (appUpdateManager != null && installStateUpdatedListener != null)
        appUpdateManager.unregisterListener(installStateUpdatedListener);
}

Я пишу этот код, читая пояснения к Android и другой учебник, но я не знаю, что вызывает эти ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...