I am developing an android application that should fire an alarm five times a day:
- the times in each day is not constant
- after the alarm is fired I will schedule the next alarm.
My problem is : the alarm notification works for 1 day then it stops and also when the device is rebooted twice the notification doesn't work , I don't now if there is another way to do that , any help will be very appreciated!
Code: I have this function to call the broadcast reciever
public static void Start_Notifying(Context context){
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(System.currentTimeMillis());
cal.add(Calendar.HOUR_OF_DAY,hour);
cal.add(Calendar.MINUTE, min);
Intent intent = new Intent(context, OnetimeAlarmReceiver.class);
intent.setAction("START_NOTIFYING");
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, notify.REQUEST_CODE, intent,0);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis() , pendingIntent);
SaveAlarmManager(alarmManager, pendingIntent);
}
the code of oneTimeAlarmReciever
public void onReceive(Context context, Intent intent) {
main_menu.con = context;
Notification notifyDetails;
NotificationManager nm = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
notifyDetails = new Notification(R.drawable.icon,s1,System.currentTimeMillis());
PendingIntent pendingIntent = PendingIntent.getActivity(context, REQUEST_CODE, new Intent(context, prayertimes.class), 0);
notifyDetails.setLatestEventInfo(context,s2+ notify.prayName , s3, pendingIntent);
notifyDetails.sound=Uri.parse(PlaySound());
nm.notify(NOTIFICATION_ID, notifyDetails);
main_menu.notify_me();
}
The code of notify_me()
static void notify_me() {
hour =pTime.num1;
min =pTime.num2;
Start_Notifying(con);
}
In the manifest file
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>
<receiver class =".OnetimeAlarmReceiver" android:name="OnetimeAlarmReceiver">
<intent-filter>
<action android:name="START_NOTIFYING" />
<action android:name="android.intent.action.BOOT_COMPLETED"> </action>
<data android:mimeType="audio/ogg" />
</intent-filter>
</receiver>
The AlarmManager service is a convenient class to schedule working on your Android application; however, when the device shuts down or reboots, all your alarms will be lost since the system does not retain them between system restarts.
The alarm is an Intent broadcast that goes to a broadcast receiver that you registered with Context. registerReceiver(BroadcastReceiver, IntentFilter) or through the <receiver> tag in an AndroidManifest. xml file. Alarm intents are delivered with a data extra of type int called Intent.
why did the Alarm notification stop after system reboot
Because alarm schedules are cleared on a reboot. If you want to have your alarms pick up again after a reboot, you will need to implement a BroadcastReceiver
that responds to the RECEIVE_BOOT_COMPLETED
broadcast. The demo/
project in my WakefulIntentService
repo demonstrates this.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With