我有一个更新,我想根据应用程序的先前版本为我的应用程序运行。
例如,如果用户的版本为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;
}
}
}
答案 0 :(得分:3)
您需要在某处自己存储以前版本的信息,例如:
步骤1:创建自定义Application
类,并在清单(android:name
的{{1}}属性)中定义它。
步骤2:在自定义<application>
类的onCreate()
中,读入一些持久数据结构,其中包含上次Application
运行时应用的版本号。例如,您的onCreate()
可能会有lastVersion
值。
步骤3:如果您发现上一版本比当前版本旧,请执行您想要的任何升级逻辑。
步骤4:将当前版本写入该持久性数据结构(例如,更新SharedPreferences
)。
如果这与数据库逻辑联系更紧密,SharedPreferences
将为您处理所有这些。