如何检测Android应用程序是否已从版本x升级到y?
我自己的教育理由,我的Android应用程序出现问题。如何检测Android应用程序是否已从版本x升级到y?
是否有现成的解决方案来检测应用程序现在已经从版本x更新到y?因为我只想在应用程序安装在特殊版本之前迁移一次数据。
谢谢。
这是一个简单的方法,可以解决您的问题。在您的代码中,您可以轻松获取应用程序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。 :)
**注意** prevVersionName.equals(“”)不应该有一个不在条件中,而应该和(&&)应该或(||)。 –
最简单的方法是将最新版本的应用程序存储在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
意图会告诉你,当你的包被替换(即更新),但不会告诉你以前安装的版本。
所以,如果我们使用Splash活动,那么我们需要把这个东西放在那里? –
你需要提交共享偏好编辑器,它也应该在回答中提到 –
使用MY_PACKAGE_REPLACED广播 –
如果你使用SQLite => http://*.com/questions/2488813/how-to-do-database-schema-migrations-in-android –
谢谢,但数据库版本没有改变。 – EV221