在android中以编程方式安装新版本时获取应用程序的先前版本代码?

时间:2013-11-28 10:29:02

标签: android

我希望在安装新版本的应用程序时获取应用程序的先前版本代码。

我做了什么:

我已经实现了以下类,它将在安装新版本时运行。 但我只能获得新的版本代码。

 public class VersionContraller extends BroadcastReceiver {  

    @Override public void onReceive(Context context, Intent intent) {  

       if(Intent.ACTION_PACKAGE_REPLACED.equals(intent.getAction()))  { 

           if(intent.getData().getSchemeSpecificPart().equals(context.getPackageName())) { 


            try {
                 PackageInfo pInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
                 int newVersion=pInfo.versionCode;   
                //I want to do some logic hear with older and new version of the application
            } catch (NameNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

           }
       }
    }
}

如何才能在上面的课程中获得以前版本的应用程序?

1 个答案:

答案 0 :(得分:0)

AFAIK你不能轻易地做到这一点。您可以在代码中使用SharedPreferences,如下所示:

String newVersion;
try {
    PackageInfo pInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
    int intVersion = pInfo.versionCode;
    newVersion = "" + intVersion;
} catch (NameNotFoundException e) {
    // Put a version you want if exception is launched
    newVersion = "something you want";
    e.printStackTrace();
}
SharedPreferences sharedPrefs = this.getSharedPreferences("your.package.app", Context.MODE_PRIVATE);
String savedVersion = "your.package.app.savedVersion";
String versionOnSP = sharedPrefs.getString(savedVersion, "previous");
if (versionOnSP.equalsIgnoreCase("previous") && newVersion.equalsIgnoreCase("versionTarget")) {
    // Your version is old; do some logic here with older version of the application
    ...
} else {
    // Your version is new, do whatever you want
}
// After that, save your current version
sharedPrefs.edit().putString(savedVersion, newVersion).commit();

通过这种方式,在更新后的第一次启动时,您将能够执行某些操作,因为您尚未在之前版本的SharedPreferences中保存版本

不是100%安全,因为用户可以删除您应用的数据,并且在重新启动应用后,您将直接转到if。也许我的想法需要改进。

编辑(在bgse评论之后)

我的代码必须放在第一个if:

public class VersionContraller extends BroadcastReceiver {  
    @Override public void onReceive(Context context, Intent intent) {  
        if(Intent.ACTION_PACKAGE_REPLACED.equals(intent.getAction()))  {
            // My code here
        }
    }
}