我注意到,当设置此警报的应用程序已升级时,将禁用警报。 这是真的吗?
到目前为止,我使用SharedPreferences
和FIRST_RUN
密钥来了解它是否是我应用程序的第一次运行。如果我找不到此密钥,则启用警报并将FIRST_RUN
设置为false,否则我什么都不做。
但我也注意到这些偏好在应用升级之间保持不变!
因此升级后,FIRST_RUN
密钥已经为假,因此我需要启用警报时不执行任何操作。
如何处理此类案件?
提前致谢
答案 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>