2016-08-18 15 views
0

У меня проблема с моим приложением для Android по собственной образовательной причине.Как обнаружить Android-приложение было обновлено с версии x на y?

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

Спасибо.

+0

Использование MY_PACKAGE_REPLACED вещать –

+0

Если вы используете SQLite => http://stackoverflow.com/questions/2488813/how-to-do-database-schema-migrations-in-android –

+0

Спасибо, но версия базы данных не изменяется. – EV221

ответ

1

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

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

+0

** ПРИМЕЧАНИЕ ** prevVersionName.equals ("") не должно быть не в условии, а вместо и (&&) должно быть или (||). –

3

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

+0

Итак, если мы используем активность Splash, тогда нам нужно поставить эту вещь там? –

+0

Вам необходимо зафиксировать общий редактор предпочтений. В ответе также должно быть указано –