如何检测Android App已经从版本x升级到y?
How to detect Android App has been upgraded from version x to y?
出于教育原因,我的 android 应用程序出现问题。
是否有现成的解决方案来检测应用程序现在已经从版本 x 更新到版本 y?因为我想迁移一些数据,只有以前安装过特殊版本的应用程序。
谢谢。
最简单的方法是将应用程序的最后一个已知版本存储在 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
意图会告诉您包何时被替换(即更新),但不会告诉您之前安装的版本。
这里有一个简单的方法可以解决您的问题。在您的代码中,您可以轻松获取应用程序版本代码和版本名称。在您的家中 activity 您检查 isAppUpdated()。如果当前应用 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;
}
此处,if isAppUpdated() return true 表示您的应用已更新。
注意,检查升级问题后,您必须更新 sharedPreferences。 :)
出于教育原因,我的 android 应用程序出现问题。
是否有现成的解决方案来检测应用程序现在已经从版本 x 更新到版本 y?因为我想迁移一些数据,只有以前安装过特殊版本的应用程序。
谢谢。
最简单的方法是将应用程序的最后一个已知版本存储在 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
意图会告诉您包何时被替换(即更新),但不会告诉您之前安装的版本。
这里有一个简单的方法可以解决您的问题。在您的代码中,您可以轻松获取应用程序版本代码和版本名称。在您的家中 activity 您检查 isAppUpdated()。如果当前应用 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;
}
此处,if isAppUpdated() return true 表示您的应用已更新。
注意,检查升级问题后,您必须更新 sharedPreferences。 :)