Как определить, что приложение Android было обновлено с версии x до y?

У меня проблема с моим приложением для Android по образовательным причинам.

Есть ли готовое решение для определения того, что приложение было обновлено с версии x до y? Потому что я хочу перенести некоторые данные только один раз, если приложение было установлено в специальной версии ранее.

Благодарю.

2 ответа

Решение

Вот простой способ, который может решить вашу проблему. В своем коде вы легко можете получить приложение versionCode и versionName. В своей домашней деятельности вы проверяете isAppUpdated(). если текущее приложение VERSION_NAME не соответствует сохраненному VERSION_NAME, приложение обновляется.

Вот пример кода:

Сохранить VersionName в настройках:

public static void saveVersionNameAndCode(Context context){
        try{
            PackageInfo packageInfo = context.getPackageManager()
                    .getPackageInfo(context.getPackageName(), 0);
            int versionCode = packageInfo.versionCode;
            String versionName=packageInfo.versionName;

            CommonTasks.showLog("Saving APP VersionCode and Version Name");

            // SAVE YOUR DATA

        }catch(Exception e){
        }
    }

Проверьте приложение обновлено:

public static boolean isAppUpdated(Context context){
        boolean result=false;
        try{
            PackageInfo packageInfo = context.getPackageManager()
                    .getPackageInfo(context.getPackageName(), 0);
            int versionCode = packageInfo.versionCode;
            String versionName=packageInfo.versionName;

            String prevVersionName= GET STORED VERSION_NAME;
            if(prevVersionName!=null && !prevVersionName.equals("") &&
                    !prevVersionName.equals(versionName)){
                showLog("App Updated");
                result=true;
            }else{
                showLog("App Not updated");
            }

        }catch(Exception e){
        }
        return result;
    }

здесь, если isAppUpdated () возвращает true, значит ваше приложение обновлено.

Примечание. После проверки проблемы обновления необходимо обновить sharedPreferences.:)

Самый простой способ - сохранить последнюю известную версию вашего приложения в SharedPreferences и проверить это при запуске приложения.

Вы можете получить код текущей версии вашего приложения с BuildConfig.VERSION_CODE,

Например:

@Override
public void onStart() {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    int lastKnownVersion = prefs.getInt("lastKnownAppVersion", 0);

    if (lastKnownVersion < BuildConfig.VERSION_CODE) {
        // Your app has been updated

        prefs.edit().putInt("lastKnownAppVersion", BuildConfig.VERSION_CODE);
    }
}

Регистрация BroadcastReceiver для прослушивания ACTION_MY_PACKAGE_REPLACED Намерение скажет вам, когда ваш пакет будет заменен (то есть обновлен), но это не скажет вам, какая версия была ранее установлена.

Другие вопросы по тегам