Tag: RECEIVE_BOOT_COMPLETED

  • How to (re)schedule an alarm after an App upgrade in Android

    In one of my Apps I am using alarms to schedule notifications.
    Of course I also want to (re)schedule the alarm when the device is rebooted. Easy: Just set a BOOT_COMPLETED action in the intent-filter of the according schedule reciever:

    <receiver android:name=".AlarmScheduleReceiver" android:enabled="true">
    <intent-filter>
    <action android:name="android.intent.action.BOOT_COMPLETED" />
    <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
    </receiver>
    

    The problem now just is that when the app is upgraded, your alarm will not be rescheduled! Not too much of a problem – if you know it! Just add another action into the intent-filter:

    <action android:name="android.intent.action.PACKAGE_REPLACED" />
    

    I was really lucky that a friend pointed that out when I added that feature to my app! Figuring this out just by getting user complaints that “the alarm sometimes doesn’t work” would not have been very funny!

    I would have been pretty glad if the API docs would mention something like “hey, when you listen for BOOT_COMPLETE, you might consider listening for PACKAGE_REPLACED, too”. Well, that’s life.