0

出于自己的教育原因,我的 android 应用程序有问题。

是否有现成的解决方案来检测应用程序现在已从版本 x 更新到 y?因为我只想在应用程序之前安装在特殊版本中时才迁移一次数据。

谢谢。

4

2 回答 2

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意图会告诉你你的包什么时候被替换(即更新),但这不会告诉你之前安装的版本。

于 2016-08-18T14:31:39.533 回答
3

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

于 2017-04-20T09:12:14.443 回答