0

我正在使用 Android Play Core Library 的新功能In-App Updates。所以文档说对于灵活的应用内更新,我需要一个InstallStateUpdatedListener在后台下载更新时监听的,然后我们需要向用户显示一个 UI,或者在我的情况下是一个 Snackbar,描述用户现在需要安装已经下载的更新。当我一直在前台时这工作正常,但是当我在下载应用内更新之前进入后台然后在一段时间后返回应用程序的前台时,我的应用程序会自动更新而不显示用户要求他们安装更新的任何 UI。根据文档,这不应该理想地发生。

我尝试删除所有类型的侦听器,注释掉完成更新的代码,但无济于事。

appUpdateManager = AppUpdateManagerFactory.create(getAppContext());
if (appUpdateInfo.updateAvailability() != UpdateAvailability.UPDATE_AVAILABLE && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)) {
    final InstallStateUpdatedListener listener =
            new InstallStateUpdatedListener() {
                @Override
                public void onStateUpdate(InstallState installState) {
                    if (installState.installStatus() ==
                            InstallStatus.DOWNLOADED) {
                        showUpdateCompletedSnackbar();
                    }
                }
            };
    appUpdateManager.registerListener(listener);
    try {
        Log.d("BaseApp","Starting Flexible in app update");
        appUpdateManager.startUpdateFlowForResult(
                appUpdateInfo,
                AppUpdateType.FLEXIBLE,
                getActivity(),
                2000);
    } catch (IntentSender.SendIntentException exception) {
        Log.e("BaseApp",exception);
    }
}

private static void showUpdateCompletedSnackbar() {
    Snackbar snackbar =
            Snackbar.make(getContainer(),
                    appContext.getString(R.string.in_app_update_snackbar_text),
                    Snackbar.LENGTH_INDEFINITE);
    snackbar.setAction("INSTALL", new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            appUpdateManager.completeUpdate();
        }
    });
    snackbar.setActionTextColor(
            ContextCompat.getColor(getAppContext(), R.color.blue));
    snackbar.show();
}
4

1 回答 1

2

好的,实际上文档对此并不清楚,但灵活应用内更新中的一个警告是,一旦您开始下载应用内更新并继续使用该应用,更新将在后台下载并然后将通过 UI 通知用户更新已下载,我们需要安装更新(此 UI 显示将由开发人员处理)。

但是我遇到的第二种情况是,如果在下载更新之前,我将我的应用程序移到后台会怎样。在这种情况下,如果在应用程序处于后台时下载更新,那么它也会安装更新而不通知用户新版本,然后当您将应用程序带到前台时,您将看到更新后的应用程序,而不是任何用户界面。

灵活更新仅用于此目的,如果用户正在使用该应用程序,则更新将在后台下载,而用户无需关闭应用程序并对其进行更新,从而留下他们在应用程序中所做的工作,并且然后发布更新下载,用户可以选择最终安装更新,无论何时他们想要或当他们在应用程序中完成他们正在进行的工作时显示给他们的 UI。

该应用程序中有更多警告,这篇中等文章将有助于大家了解更多边缘案例https://proandroiddev.com/android-in-app-updates-common-pitfalls-and-some-good-模式-9024988bbbe8

于 2019-07-12T09:44:29.007 回答