在后台运行时安装了灵活的应用内更新

时间:2019-07-11 14:06:38

标签: android in-app-update

我正在使用Android Play核心库的新功能In-App Updates。 因此,文档说明,对于灵活的应用内更新,我需要一个InstallStateUpdatedListener来监听在后台下载更新的时间,然后我们需要向该应用显示一个UI或一个Snackbar用户,描述用户现在需要安装已经下载的更新。当我一直处于前台状态时,此方法效果很好,但是当我在下载应用内更新之前进入后台,然后在一段时间后返回至应用程序的前台时,我的应用程序会自动更新而不显示要求用户安装更新的用户界面。按照文档,这应该不理想。

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

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();
}

1 个答案:

答案 0 :(得分:0)

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

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

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

应用程序中有更多警告,这篇中篇文章将对大家都有用,https://proandroiddev.com/android-in-app-updates-common-pitfalls-and-some-good-patterns-9024988bbbe8