How to set multiple alarms using Alarm Manager in Android
06-12-2019We can use following class to set alarm for multiple day of weeks:
import android.app.AlarmManager; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import java.util.Calendar; public class AlarmStartRadioHelper { private Context mContext; private Class<? extends BroadcastReceiver> mBroadcastReceiverClass; private static int RQS_1 = 1002; private String mActionName; public AlarmStartRadioHelper(Context context, Class<? extends BroadcastReceiver> receiver, String actionName) { this.mContext = context; this.mBroadcastReceiverClass = receiver; mActionName = actionName; } public AlarmStartRadioHelper(Context mContext) { this.mContext = mContext; } public void setAlarm(int dayOfWeek, int hour, int minute, AlarmHelperResponse alarmHelperResponse) { Calendar calNow = Calendar.getInstance(); Calendar calSet = (Calendar) calNow.clone(); calSet.setTimeInMillis(System.currentTimeMillis()); calSet.set(Calendar.DAY_OF_WEEK, dayOfWeek); calSet.set(Calendar.HOUR_OF_DAY, hour); calSet.set(Calendar.MINUTE, minute); calSet.set(Calendar.SECOND, 0); if (calSet.compareTo(calNow) <= 0) { calSet.add(Calendar.DATE, 1); } AlarmManager alarmMgr = getAlarmManager(); if (alarmMgr == null) return; Intent intent = new Intent(mContext, mBroadcastReceiverClass); PendingIntent alarmIntent = PendingIntent.getBroadcast(mContext, RQS_1 + dayOfWeek, intent, PendingIntent.FLAG_CANCEL_CURRENT); alarmMgr.set(AlarmManager.RTC_WAKEUP, calSet.getTimeInMillis(), alarmIntent); alarmHelperResponse.onTimeSet(); } public void cancelAlarm(int dayOfWeek) { Intent intent = new Intent(mContext, mBroadcastReceiverClass); intent.setAction(mActionName); PendingIntent pendingIntent = PendingIntent.getBroadcast( mContext, RQS_1 + dayOfWeek, intent, PendingIntent.FLAG_CANCEL_CURRENT); AlarmManager alarmManager = getAlarmManager(); alarmManager.cancel(pendingIntent); pendingIntent.cancel(); } private AlarmManager getAlarmManager() { return (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE); } public boolean isAlarmActive(int dayOfWeek) { Intent intent = new Intent(mContext, mBroadcastReceiverClass); intent.setAction(mActionName); return (PendingIntent.getBroadcast(mContext, RQS_1 + dayOfWeek, intent, PendingIntent.FLAG_CANCEL_CURRENT) != null); } }