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