[英]How to know my Android application has been upgraded in order to reset an alarm?
我注意到设置了该警报的应用程序已升级时,该警报已禁用。 真的吗 ?
到目前为止,我将SharedPreferences
与FIRST_RUN
键一起使用,以便了解它是否是我的应用程序的首次运行。 如果找不到此键,则启用警报并将FIRST_RUN
设置为false,否则我什么也不做。
但是我也注意到,在应用升级之间,这些偏好仍然保持不变!
因此,升级后, FIRST_RUN
密钥已经为false,因此在需要启用警报时我什么也不做。
如何处理这种情况?
提前致谢
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
被任何应用程序的任何升级触发。
我自己从来没有尝试过,但是如何创建一个侦听ACTION_PACKAGE_REPLACED
Intent的BroadcastReceiver
呢?
我曾经考虑过尝试此操作,但是不确定是否存在“鸡与蛋”问题(例如,是否在新的升级应用程序接收到Intent之前就发送了Intent?)。 不过,值得一试。
只需简单地听android.intent.action.MY_PACKAGE_REPLACED
...这个INTENT
将会通知您是否已在现有应用程序上安装了新版本的应用程序
注意:此意图可以从API 12开始使用
对于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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.