如何知道我的 Android 应用程序已经升级,以便重置闹钟?

我注意到当设置这个警报的应用程序升级时,警报被禁用

到目前为止,我使用了带有 FIRST_RUN键的 SharedPreferences,以便知道它是否是我的应用程序的第一次运行。如果找不到这个键,我就启用警报并将 FIRST_RUN设置为 false,否则什么也不做。

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

所以在升级之后,FIRST_RUN键已经是假的,所以我什么也不做,而我的警报需要被启用。

如何处理这类案件?

先谢谢你

28582 次浏览

我自己从来没有尝试过,但是创建一个听 ACTION_PACKAGE_REPLACED意图的 BroadcastReceiver怎么样?

I've thought about trying this before, but I'm not sure if there's a chicken-and-egg problem with it or not (e.g., does the Intent get sent before the new upgraded application can receive it?). Worth a try, though.

返回文章页面解决方案:

需要一个接收器与下列行的清单:

<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

简单地说,听取 android.intent.action.MY_PACKAGE_REPLACED... 这个 INTENT将通知您,如果您的应用程序的一个新版本已经安装在一个现有的

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

对于12级及以上的 Android API,您需要使用操作 ACTION _ my _ Package _ Replace注册 BroadcastReceiver

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