我正在使用 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();
}