【问题标题】:How to detect Android App has been upgraded from version x to y?如何检测Android App已从版本x升级到y?
【发布时间】:2016-08-18 14:24:21
【问题描述】:

出于自己的教育原因,我的 Android 应用存在问题。

是否有现成的解决方案来检测应用现在已从版本 x 更新到 y?因为我只想迁移一些数据,前提是该应用之前安装了特殊版本。

谢谢。

【问题讨论】:

  • 使用 MY_PACKAGE_REPLACED 广播
  • 如果你使用 SQLite => stackoverflow.com/questions/2488813/…
  • 谢谢,但数据库版本没有改变。
  • 您可以使用带有版本号的 SharedPreference。当应用程序启动时:检查它并做任何你想做的事情,最后将它(SP)更新到新版本。
  • @TimCastelijns 谢谢!

标签: android android-version android-update-app


【解决方案1】:

最简单的方法是将应用程序的最后一个已知版本存储在 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活动,那么我们需要把这个东西放在那里吗?
  • 你需要提交共享偏好编辑器,答案中也应该提到
  • 不要忘记应用更改:settings.edit().putInt("lastKnownAppVersion", BuildConfig.VERSION_CODE).apply();
【解决方案2】:

这里有一个简单的方法可以解决您的问题。在您的代码中,您可以轻松获取应用程序版本代码和版本名称。在您的家庭活动中,您检查 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。 :)

【讨论】:

  • 注意 prevVersionName.equals("") 条件中不应该有一个 not ,而应该是 or(||) 而不是 and(&&)。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-22
  • 1970-01-01
  • 2020-09-29
  • 1970-01-01
  • 2020-08-24
相关资源
最近更新 更多