How to know my Android application has been upgraded in order to reset an alarm?
I noticed that an alarm is disabled when the application which sets this alarm has been upgraded. Is that true ?
Until now, I used the
SharedPreferences with a
FIRST_RUN key in order to know if it’s the first run of my application. If I don’t find this key, I enable the alarm and set
FIRST_RUN to false, else I do nothing.
But I noticed also that these preferences remain intact between app upgrade !
So after an upgrade, the
FIRST_RUN key is already false, so I do nothing while my alarm need to be enabled.
How to handle such case ?
Thanks in advance
4 Solutions collect form web for “How to know my Android application has been upgraded in order to reset an alarm?”
I’ve never tried this myself, but what about creating a
BroadcastReceiver that listens to the
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.
Solution by Daniel Lew :
Need a receiver with the following lines in manifest :
<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 is used in order to prevent
OnUpgradeReceiver to be triggered by any upgrade of any application.
Simply, listen to the
android.intent.action.MY_PACKAGE_REPLACED … This
INTENT will notify you if a new version of your application has been installed over an existing one
Note: This intent can is available starting from API 12
For the Android OS v12 and above you need to register BroadcastReceiver with action ACTION_MY_PACKAGE_REPLACED
<receiver android:name=".MyBroadcastReceiver"> <intent-filter> <action android:name="android.intent.action.MY_PACKAGE_REPLACED" /> </intent-filter> </receiver>