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

时间:2010-01-25 16:59:50

标签: android

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

到目前为止,我使用SharedPreferencesFIRST_RUN密钥来了解它是否是我应用程序的第一次运行。如果我找不到此密钥,则启用警报并将FIRST_RUN设置为false,否则我什么都不做。

但我也注意到这些偏好在应用升级之间保持不变!

因此升级后,FIRST_RUN密钥已经为假,因此我需要启用警报时不执行任何操作。

如何处理此类案件?

提前致谢

4 个答案:

答案 0 :(得分:89)

  

Daniel Lew的解决方案:

需要清单中包含以下行的接收器:

<receiver android:name=".OnUpgradeReceiver">
  <intent-filter>
    <action android:name="android.intent.action.PACKAGE_REPLACED" />
    <data android:scheme="package" android:path="your.app.package" />
  </intent-filter>
</receiver>

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

答案 1 :(得分:58)

我自己从未尝试过这个,但是如何创建一个听ACTION_PACKAGE_REPLACED意图的BroadcastReceiver

我之前想过尝试过这个问题,但是我不确定它是否存在鸡与蛋的问题(例如,在新升级的应用程序可以接收之前,Intent是否会被发送?)。值得一试。

答案 2 :(得分:21)

只需听取android.intent.action.MY_PACKAGE_REPLACED ...如果您的应用程序的新版本已安装在现有版本上,此INTENT将通知您

注意:此意图可从API 12

开始提供

答案 3 :(得分:18)

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

<receiver android:name=".MyBroadcastReceiver">
  <intent-filter>
    <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
  </intent-filter>
</receiver>