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

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

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

Спасибо.


person EV221    schedule 18.08.2016    source источник
comment
Использовать трансляцию MY_PACKAGE_REPLACED   -  person Tim    schedule 18.08.2016
comment
Если вы используете SQLite = ›stackoverflow.com/questions/2488813/   -  person Kevin Robatel    schedule 18.08.2016
comment
Спасибо, но версия базы не изменилась.   -  person EV221    schedule 18.08.2016
comment
Вы можете использовать SharedPrefference с номером версии. Когда приложение запускается: проверьте его и делайте все, что хотите, и, наконец, обновите его (SP) до новой версии.   -  person adalpari    schedule 18.08.2016
comment
@TimCastelijns Спасибо!   -  person EV221    schedule 19.08.2016


Ответы (2)


Вот простой способ решить вашу проблему. В вашем коде вы можете легко получить код версии приложения и имя версии. В домашней активности вы проверяете isAppUpdated (). если текущая версия APP 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 () return true, означает, что ваше приложение обновлено.

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

person Md. Sajedul Karim    schedule 20.04.2017
comment
ПРИМЕЧАНИЕ prevVersionName.equals () не должно быть not в условии, а вместо and (&&) должно быть or (||). - person pratham kesarkar; 01.09.2017

Самый простой способ - сохранить последнюю известную версию вашего приложения в 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 сообщит вам, когда ваш пакет заменен (то есть обновлен), но это не скажет вам, какая версия была установлена ​​ранее.

person Bryan Herbst    schedule 18.08.2016
comment
Итак, если мы используем активность Splash, тогда нам нужно поместить эту вещь туда? - person Shamsul Arefin Sajib; 23.01.2018
comment
Вам необходимо зафиксировать общий редактор предпочтений, это также должно быть упомянуто в ответе - person Shamsul Arefin Sajib; 23.01.2018
comment
Не забудьте применить изменения: settings.edit().putInt("lastKnownAppVersion", BuildConfig.VERSION_CODE).apply(); - person Thomas Mary; 21.01.2019