Search code examples
androidalarmmanagerandroid-alarmssetalarmclock

How to cancel alarm set with setAlarmClock() Android


How can I cancel an alarm set with setAlarmClock()?

val alarmReceiver = Intent(applicationContext, AlarmReceiver::class.java)
val alarmReceiverPi = PendingIntent.getBroadcast(applicationContext, 0, alarmReceiver, 0)

val alarmInfo = AlarmManager.AlarmClockInfo(time, alarmReceiverPi)

alarmManager.setAlarmClock(alarmInfo, alarmReceiverPi)

Solution

  • The id to used to locate the PendingIntent, following is my example:

    fun setAlarm() {
        val alarmPendingIntent = getAlarmPendingIntent(alarmId)
    
        alarmManager.setExact(AlarmManager.RTC_WAKEUP, _timeLong.value, alarmPendingIntent)
    
        showToast("Alarm has been set")
    }
    
    fun cancelAlarm() {
        val alarmPendingIntent = getAlarmPendingIntent(alarmId)
    
        alarmManager.cancel(alarmPendingIntent) 
    
        showToast("Alarm has bee canceled")
    }
    
    private fun getAlarmPendingIntent(id: Long): PendingIntent {
        val intent = Intent(getApplication(), AlarmReceiver::class.java)
    
        return PendingIntent.getBroadcast(getApplication(), id.toInt(), intent, PendingIntent.FLAG_UPDATE_CURRENT)  //will override if same id
    }