До сих пор у меня есть этот метод, который устанавливает повторяющийся сигнал тревоги. Этот сигнал устанавливает будильник в 11:15 с 15-минутными интервалами. Мне интересно, хочу ли я установить еще один повторяющийся сигнал тревоги в течение 12:00 утра рядом с этим сигналом тревоги, нужно ли мне делать что-то другое?Установка нескольких аварийных сигналов
Кроме того, возможно ли иметь несколько видов видов, чтобы показать, когда будильник погас? Если бы я хотел, чтобы одно представление появилось в 11:15, а другое представление появилось в 12:36, могу ли я настроить это? Если да, то как?
private void setCollectionAlarms() {
AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AlarmReceiver.class);
pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
interval = 900000;
try {
//If the date is set to HHmm, then add current date time
SimpleDateFormat format = new SimpleDateFormat("HH:mm");
String time = "11:15";
long timeOfFirstCollectionInMillis = format.parse(time).getTime();
System.out.println("Time in Milis: " + timeOfFirstCollectionInMillis);
Calendar now = Calendar.getInstance();
now.setTime(new Date());
Calendar cal = Calendar.getInstance();
Date timedate = format.parse(time);
cal.setTime(timedate); // thinks 1970
cal.set(Calendar.YEAR, now.get(Calendar.YEAR));
cal.set(Calendar.MONTH, now.get(Calendar.MONTH));
cal.set(Calendar.DAY_OF_MONTH, now.get(Calendar.DAY_OF_MONTH));
//If the time from the db is before now (That is no date set but time set), then set it for tomorrow
if (cal.before(now)) {
// increase
Date tomorrow = cal.getTime();
cal.setTime(tomorrow);
cal.add(Calendar.DATE, 1);
tomorrow = cal.getTime();
System.out.println("TimeDate for Tomorrow: " + tomorrow);
//convert date to milis
long timeInMilis = (tomorrow.getTime());
//Set Alarm to Repeat
manager.setRepeating(AlarmManager.RTC_WAKEUP, timeInMilis, interval, pendingIntent);
//else, set the alarm for today
} else {
timedate = cal.getTime();
System.out.println("TimeDate: " + timedate);
//convert date to milis
long timeInMilis = (timedate.getTime());
//Set Alarm to Repeat
manager.setRepeating(AlarmManager.RTC_WAKEUP, timeInMilis, interval, pendingIntent);
}
} catch (ParseException e) {
e.printStackTrace();
}
}
Просто краткое примечание, чтобы довести до вашего сведения поведение setRepeating, измененное в KitKat - https://developer.android.com/about/versions/android-4.4.html, оно не является точным (в случае, если это имеет значение) –
ой ну спасибо! Мне нужна точная повторяющаяся тревога. Возможно ли это? –
Да, 'setExact()' будет работать корректно. Сейчас немного больно, если вы хотите, чтобы это было точно, вам нужно установить новый сигнал тревоги, когда вы обрабатываете событие (в вашем «BroadcastReceiver») из setExact, эффективно создавая цепочку аварийных сигналов, причем последняя установка время для следующего. –