Чтобы отключить будильник через 30 секунд, используйте
Calendar cal = Calendar.getInstance();
, чтобы узнать текущее время, а затем
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis()+30000, sender);
Редактировать:
Я думаю, что проблема в ELAPSED_REALTIME_WAKEUP.Это сообщает AlarmManager о том, что время, которое вы отводите, зависит от времени, прошедшего с момента запуска системы.Это нормально в течение 30 секунд, но если вы хотите, чтобы оно основывалось на реальном времени, вам следует использовать RTC или RTC_WAKEUP.См. javadoc для полного объяснения этих типов.