Я использую новую функцию Android Play Core Library In-App Updates
.Итак, в документации сказано, что для гибкого обновления в приложении мне нужен InstallStateUpdatedListener
, который будет прослушивать, когда обновление загружается в фоновом режиме, а затем нам нужно показать пользовательский интерфейс или, в моем случае, 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();
}