2016-08-18 88 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不匹配,那麼應用會更新。

下面是示例代碼:

保存版本名稱中的首選項:

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。 :)

+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

你需要提交共享偏好編輯器,它也應該在回答中提到 –

相關問題