2016-08-18 81 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

你需要提交共享偏好编辑器,它也应该在回答中提到 –

相关问题