I am new to android developing, and i am working on Task Reminder App. I need to set repeating alarm for the task, and for that purpose, i am using Recurrence Picker Dialog.
But i don't know how to set multiple alarms based on the string returned by the recurrence picker dialog.
I am using the following recurrence picker dialog.
It returns a string in variable 'rrule', but i don't know how to use that string to set multiple alarms. Below is the code to set Listener for the picker.
recurrencePickerDialog.setOnRecurrenceSetListener(new RecurrencePickerDialog.OnRecurrenceSetListener() {
@Override
public void onRecurrenceSet(String rrule) {
}
});
recurrencePickerDialog.show(getSupportFragmentManager(),"recurrencePicker");
Anyone please help me. I would be thankful..
You can set alarms using Alarm Manager and a Custom Broadcast Receiver. You can set your alarm like this.
@Override
public void onRecurrenceSet(String rrule) {
if (rrule != null && rrule.length() > 0) {
EventRecurrence recurrenceEvent = new EventRecurrence();
recurrenceEvent.setStartDate(new Time("" + new Date().getTime()));
recurrenceEvent.parse(rrule);
//Sets alarm
Intent intent=new Intent(this,MyBroadcastReceiver.class);
PendingIntent pendingIntent= PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager=(AlarmManager)getSystemService(ALARM_SERVICE);
long offset=getNextOccurence(recurrenceEvent);
alarmManager.set(AlarmManager.RTC_WAKEUP, Calendar.getInstance().getTimeInMillis()+offset,pendingIntent);
//Then save the rule somewhere.
} else {
Lod.d("TEST","No recurrence");
}
}
getNextOccurrence function
/**
* Get the milliseconds till next alarm
* @param e
* @return
*/
private long getNextOccurrence(EventRecurrence e) {
switch (e.freq) {
case EventRecurrence.HOURLY://When alarm is hourly
if(e.interval==0)//When set to 1 Hour
return 1000 * 60 * 60;
return 1000 * 60 * 60 * e.interval;
// TODO: Implement cases for other frequencies
}
return 0;
}
Then, in your Broacast Receiver, do the following:
Hope this helps you to get started.