繁体   English   中英

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

[英]How to know my Android application has been upgraded in order to reset an alarm?

我注意到设置了该警报的应用程序已升级时,该警报已禁用。 真的吗 ?

到目前为止,我将SharedPreferencesFIRST_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM