2

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

例如,如果用户有版本 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;
        }
    }
}
4

1 回答 1

3

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

第 1 步:创建一个自定义Application类,并在清单中定义它(android:name属性 of <application>)。

步骤#2:在onCreate()您的自定义Application类中,读入一些包含上次onCreate()运行的应用程序版本号的持久数据结构。例如,您lastVersionSharedPreferences.

步骤#3:如果您看到最后一个版本比您当前的版本旧,请执行您想要的任何升级逻辑。

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

如果这与数据库逻辑更相关,SQLiteOpenHelper请为您处理所有这些。

于 2012-05-07T00:04:16.300 回答