繁体   English   中英

如何检测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意图将告诉您何时更换(即更新了)您的软件包,但不会告诉您以前安装了哪个版本。

这是解决问题的一种简单方法。 在您的代码中,您可以轻松获取应用程序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。 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM