Добрый день.
Написал код, который работает нормально когда приложение находится во внутреннем тестировании Google play. Но, перестает работать, когда выкладываю его в рабочую версию.
Иногда, один раз на 100 открытий возможно и заработает. Не могу понять в чем дело.
Ни каких ошибок в консоли не выводит.
Привожу код:
Код:
public class MainActivity extends AppCompatActivity {
private AppUpdateManager appUpdateManager;
private InstallStateUpdatedListener installStateUpdatedListener;
private static final int FLEXIBLE_APP_UPDATE_REQ_CODE = BuildConfig.VERSION_CODE;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
updateApp();
}
@Override
protected void onStop() {
super.onStop();
removeInstallStateUpdateListener();
}
public void updateApp() {
appUpdateManager = AppUpdateManagerFactory.create(getApplicationContext());
installStateUpdatedListener = state -> {
if (state.installStatus() == InstallStatus.DOWNLOADED) {
popupSnackBarForCompleteUpdate();
} else if (state.installStatus() == InstallStatus.INSTALLED) {
removeInstallStateUpdateListener();
} else {
Log.d(TAG, "InstallStateUpdatedListener: state: " + state.installStatus());
}
};
appUpdateManager.registerListener(installStateUpdatedListener);
checkUpdate();
}
private void checkUpdate() {
Task<AppUpdateInfo> appUpdateInfoTask = appUpdateManager.getAppUpdateInfo();
appUpdateInfoTask.addOnSuccessListener(appUpdateInfo -> {
if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
&& appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)) {
startUpdateFlow(appUpdateInfo);
} else if (appUpdateInfo.installStatus() == InstallStatus.DOWNLOADED) {
popupSnackBarForCompleteUpdate();
}
});
}
private void startUpdateFlow(AppUpdateInfo appUpdateInfo) {
try {
appUpdateManager.startUpdateFlowForResult(appUpdateInfo, AppUpdateType.FLEXIBLE, this, FLEXIBLE_APP_UPDATE_REQ_CODE);
} catch (IntentSender.SendIntentException e) {
e.printStackTrace();
}
}
private void popupSnackBarForCompleteUpdate() {
Snackbar.make(findViewById(android.R.id.content).getRootView(), "New version app", Snackbar.LENGTH_INDEFINITE)
.setAction("Install", view -> {
if (appUpdateManager != null) {
appUpdateManager.completeUpdate();
}
})
.setActionTextColor(getColor(R.color.purple_500))
.show();
}
private void removeInstallStateUpdateListener() {
if (appUpdateManager != null) {
appUpdateManager.unregisterListener(installStateUpdatedListener);
}
}
}