我怎么知道哪个应用程序版本被android替换?

时间:2012-05-06 23:38:13

标签: android version-control replace broadcastreceiver upgrade

我有一个更新,我想根据应用程序的先前版本为我的应用程序运行。

例如,如果用户的版本为1-5,并且他们正在升级到6或7,我想运行更新。另外,如果他们从6升级到7,我不想运行更新。

我尝试使用接受PACKAGE_REMOVE和PACKAGE_REPLACE意图的广播接收器来完成此操作,但他们似乎并未向我提供有关正在删除的应用的信息。除非我重新安装相同的版本,否则我不会获得PACKAGE_REMOVED意图。很难分辨,因为在收到意图之前,调试器和日志打印似乎没有被捕获。有什么想法吗?

@Override
public void onReceive(Context context, Intent intent) {
    if (isOccurUpdated) {
        return;
    }
    if (action.equalsIgnoreCase("android.intent.action.PACKAGE_REPLACED")) {
        String name = info.versionName;
        // We are assuming that we didn't get down here if we have already
        // done this update
        Log.d(TAG,"We receive the REPLACE intent "+name);
        if (name.contains(OCCUR_ID_UPDATE) || name.contains(OCCUR_ID_UPDATE_FIX)) {
            dbh.occurIdUpdate();
        }
    } else if (action.equalsIgnoreCase("android.intent.action.PACKAGE_REMOVED")) {
        String name = info.versionName;
        if (name.contains(OCCUR_ID_UPDATE)) {
            isOccurUpdated = true;
        }
    }
}

1 个答案:

答案 0 :(得分:3)

您需要在某处自己存储以前版本的信息,例如:

步骤1:创建自定义Application类,并在清单(android:name的{​​{1}}属性)中定义它。

步骤2:在自定义<application>类的onCreate()中,读入一些持久数据结构,其中包含上次Application运行时应用的版本号。例如,您的onCreate()可能会有lastVersion值。

步骤3:如果您发现上一版本比当前版本旧,请执行您想要的任何升级逻辑。

步骤4:将当前版本写入该持久性数据结构(例如,更新SharedPreferences)。

如果这与数据库逻辑联系更紧密,SharedPreferences将为您处理所有这些。