我的Android应用程序因自己的教育原因有问题。
是否有现成的解决方案来检测应用程序现在已从版本x更新为y?因为我希望仅在应用程序之前安装在特殊版本中时才迁移一些数据。
感谢。
答案 0 :(得分:5)
最简单的方法是将应用程序的最新已知版本存储在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
意图将告诉您何时更换(即更新)包,但这不会告诉您以前安装的是什么版本。
答案 1 :(得分:3)
这是一种可以解决问题的简单方法。在您的代码中,您可以轻松获取应用程序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()返回true表示您的应用已更新。
注意,检查升级问题后,您必须更新sharedPreferences。 :)