Set a repeat alarm in android… here is a solution to the problem.
Set a repeat alarm in android
I’m trying to set a repeating alarm in android that ends up going off at a user-specified time. However, once the alarm is set, it goes off immediately, even if I make sure the alarm doesn’t go off until it’s set. For example, I set the following code to sound the alarm at 10:43, so I set the alarm to 10:41, but the alarm goes off immediately. Any ideas? Thanks in advance.
public class Alarm extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
PowerManager pm = (PowerManager) context
.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(
PowerManager.PARTIAL_WAKE_LOCK, "");
wl.acquire();
Toast.makeText(context, "Alarm !!!!!!!!!!", Toast.LENGTH_LONG).show(); // For
Intent scheduledIntent = new Intent(context,ReminderMessage.class);
scheduledIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(scheduledIntent);
// example
wl.release();
}
public void SetAlarm(Context context) {
AlarmManager am = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
Date dat = new Date();
Calendar cal_alarm = Calendar.getInstance();
Calendar cal_now = Calendar.getInstance();
cal_now.setTime(dat);
cal_alarm.setTime(dat);
cal_alarm.set(Calendar.HOUR_OF_DAY, 10);
cal_alarm.set(Calendar.MINUTE, 43);
cal_alarm.set(Calendar.SECOND, 0);
if(cal_alarm.before(cal_now)){
cal_alarm.add(Calendar.DATE, 1);
}
Intent i = new Intent(context, Alarm.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), cal_alarm.getTimeInMillis() , pi); // Millisec * Second * Minute
}
public void CancelAlarm(Context context) {
Intent intent = new Intent(context, Alarm.class);
PendingIntent sender = PendingIntent
.getBroadcast(context, 0, intent, 0);
AlarmManager alarmManager = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(sender);
}
}
Solution
I think your line:
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), cal_alarm.getTimeInMillis() , pi); // Millisec * Second * Minute
is to trigger the alarm immediately, the second parameter is the predetermined time, and the third is the time period. So if you want your alarm to go off at cal_alarm time, you want to use something like:
am.setRepeating(AlarmManager.RTC_WAKEUP, cal_alarm.getTimeInMillis(), 1000*60*5 , pi); // Millisec * Second * Minute
It should ring at cal_alarm time and repeat every 5 minutes.