应用程序在后台时安装灵活的应用程序内更新
Flexible In-App update installed while app is in background
我正在使用 Android Play Core Library 的新功能 In-App Updates
。
所以文档说,对于灵活的应用程序内更新,我需要一个 InstallStateUpdatedListener
来监听更新何时在后台下载,然后我们需要显示一个 UI 或者在我的例子中给用户的 Snackbar,描述用户现在需要安装已经下载的更新。当我一直在前台时,这工作正常,但是当我在下载应用程序内更新之前转到后台,然后 return 一段时间后到应用程序的前台时,我的应用程序自动得到更新而不向用户显示任何 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();
}
好吧,实际上文档对此并不清楚,但灵活 In-app 更新中的一个警告是,一旦您开始下载 in-app 更新并继续使用该应用程序, 更新将在后台下载,然后通过 UI 通知用户更新已下载,我们需要安装更新( UI 的显示,所有将由开发人员)。
但是第二种情况,我有一个问题,如果在下载更新之前,我将我的应用程序移到后台会怎样。在这种情况下,如果在应用程序处于后台时下载了更新,那么它也会安装更新而不通知用户新版本,然后当您将应用程序带到前台时,您会看到更新后的应用程序, 而不是任何 UI.
灵活更新仅用于此目的,如果用户正在使用该应用程序,更新将在后台下载,用户无需关闭应用程序并更新它,从而离开他们正在做的工作在应用程序中,然后 post 下载更新,用户可以选择使用 UI 随时或在他们完成应用程序中的正在进行的工作时显示给他们的最终安装更新。
应用中有更多注意事项,这篇中型文章将有助于大家了解更多边缘情况https://proandroiddev.com/android-in-app-updates-common-pitfalls-and-some-good-patterns-9024988bbbe8
我正在使用 Android Play Core Library 的新功能 In-App Updates
。
所以文档说,对于灵活的应用程序内更新,我需要一个 InstallStateUpdatedListener
来监听更新何时在后台下载,然后我们需要显示一个 UI 或者在我的例子中给用户的 Snackbar,描述用户现在需要安装已经下载的更新。当我一直在前台时,这工作正常,但是当我在下载应用程序内更新之前转到后台,然后 return 一段时间后到应用程序的前台时,我的应用程序自动得到更新而不向用户显示任何 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();
}
好吧,实际上文档对此并不清楚,但灵活 In-app 更新中的一个警告是,一旦您开始下载 in-app 更新并继续使用该应用程序, 更新将在后台下载,然后通过 UI 通知用户更新已下载,我们需要安装更新( UI 的显示,所有将由开发人员)。
但是第二种情况,我有一个问题,如果在下载更新之前,我将我的应用程序移到后台会怎样。在这种情况下,如果在应用程序处于后台时下载了更新,那么它也会安装更新而不通知用户新版本,然后当您将应用程序带到前台时,您会看到更新后的应用程序, 而不是任何 UI.
灵活更新仅用于此目的,如果用户正在使用该应用程序,更新将在后台下载,用户无需关闭应用程序并更新它,从而离开他们正在做的工作在应用程序中,然后 post 下载更新,用户可以选择使用 UI 随时或在他们完成应用程序中的正在进行的工作时显示给他们的最终安装更新。
应用中有更多注意事项,这篇中型文章将有助于大家了解更多边缘情况https://proandroiddev.com/android-in-app-updates-common-pitfalls-and-some-good-patterns-9024988bbbe8