如何知道我的Android应用程序已升级以便重置警报?

How to know my Android application has been upgraded in order to reset an alarm?

我注意到,设置此警报的应用程序已升级时,警报已禁用。是真的吗?

直到现在,我都使用SharedPreferencesFIRST_RUN键来确定它是否是我的应用程序的第一次运行。如果找不到此键,则启用警报并将FIRST_RUN设置为false,否则我什么也不做。

但是我也注意到,在应用升级之间这些首选项保持不变!

因此,升级后,FIRST_RUN键已经为假,因此在需要启用警报时我什么也不做。

如何处理这种情况?

预先感谢


Solution by Daniel Lew :

清单中需要以下行的接收者:

1
2
3
4
5
6
<receiver android:name=".OnUpgradeReceiver">
  <intent-filter>
   
    <data android:scheme="package" android:path="your.app.package" />
  </intent-filter>
</receiver>

android:path用于防止任何应用程序的任何升级触发OnUpgradeReceiver


我从来没有尝试过自己,但是如何创建一个BroadcastReceiver来监听ACTION_PACKAGE_REPLACED意图?

我之前曾考虑过尝试此操作,但不确定是否存在"鸡与蛋"问题(例如,是否在新的升级应用程序接收到Intent之前就发送了Intent?)。不过,值得一试。


只需听android.intent.action.MY_PACKAGE_REPLACED ... ... INTENT会通知您是否已在现有版本上安装了新版本的应用程序

注意:此意图可以从API 12开始使用


对于Android OS v12及更高版本,您需要使用操作ACTION_MY_PACKAGE_REPLACED

注册BroadcastReceiver

1
2
3
4
5
<receiver android:name=".MyBroadcastReceiver">
  <intent-filter>
   
  </intent-filter>
</receiver>