В этом примере я использую setRepeating(). Если вам нужен одноразовый будильник, вы бы просто использовали set(). Обязательно укажите время для запуска будильника в той же временной базе, которую вы используете в начальном параметре для set(). В моем примере выше я использую AlarmManager.ELAPSED_REALTIME_WAKEUP, поэтому моя временная база SystemClock.elapsedRealtime().
// this constructor is called by the alarm manager. publicMyAlarm(){ }
// you can use this constructor to create the alarm. // Just pass in the main activity as the context, // any extras you'd like to get later when triggered // and the timeout publicMyAlarm(Context context, Bundle extras, int timeoutInSeconds){ AlarmManageralarmMgr= (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); Intentintent=newIntent(context, MyAlarm.class); intent.putExtra(REMINDER_BUNDLE, extras); PendingIntentpendingIntent= PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); Calendartime= Calendar.getInstance(); time.setTimeInMillis(System.currentTimeMillis()); time.add(Calendar.SECOND, timeoutInSeconds); alarmMgr.set(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(), pendingIntent); }
@Override publicvoidonReceive(Context context, Intent intent) { // here you can get the extras you passed in when creating the alarm //intent.getBundleExtra(REMINDER_BUNDLE));
Toast.makeText(context, "Alarm went off", Toast.LENGTH_SHORT).show(); } }
Ответ 3
Что вам нужно сделать, так это сначала создать намерение, которое вам нужно запланировать. Затем получите PendingIntent этого намерения. Вы можете планировать действия, службы и трансляции. Для планирования действия, например, MyActivity:
//getting current time and add 5 seconds in it Calendarcal= Calendar.getInstance(); cal.add(Calendar.SECOND, 5); //registering our pending intent with alarmmanager AlarmManageram= (AlarmManager) getSystemService(ALARM_SERVICE); am.set(AlarmManager.RTC_WAKEUP,cal.getTimeInMillis(), pi);
Теперь MyActivity будет запущен через 5 секунд после запуска приложения, независимо от того, остановили вы свое приложение или устройство перешло в спящий режим (из-за опции RTC_WAKEUP). Вы можете прочитать полный пример кода Планирования действий, сервисов и трансляций #Android
Ответ 4
Я хотел прокомментировать, но <50 повторений, поэтому продолжаю. Дружеское напоминание, что если вы работаете на 5.1 или выше и используете интервал менее минуты, это произойдет:
Suspiciously short interval 5000 millis; expanding to 60 seconds