我注意到,设置此警报的应用程序已升级时,警报已禁用。真的吗 ?
直到现在,我都使用SharedPreferences带有的FIRST_RUN键,以了解它是否是我的应用程序的首次运行。如果找不到此键,则启用警报并将其设置FIRST_RUN为false,否则我什么也不做。
但我也注意到,在应用升级之间,这些偏好仍然保持不变!
因此,升级后,FIRST_RUN密钥已经为假,因此在需要启用警报时我什么也不做。
如何处理这种情况?
提前致谢
Answers:
我自己从来没有尝试过,但是如何创建一个BroadcastReceiver监听ACTION_PACKAGE_REPLACEDIntent的东西呢?
我曾经考虑过尝试此操作,但是不确定是否存在“鸡与蛋”问题(例如,是否在新的升级应用程序接收到Intent之前就发送了Intent?)。不过,值得一试。
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被任何应用程序的任何升级触发。
简单地,请听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>