#java #android #alarmmanager
#java #Android #alarmmanager
Вопрос:
например, я хочу иметь будильник, который будет срабатывать каждое воскресенье в полдень…. как бы мне это сделать?
Комментарии:
1. Мне было интересно что-то очень похожее. Есть ли способ запускать событие каждые 30 минут или час? Может быть, какое-то задание cron? Просто интересно, что Android может предложить для решения этой проблемы. Спасибо
Ответ №1:
Используйте класс AlarmManager:
http://developer.android.com/reference/android/app/AlarmManager.html
Обзор класса
Этот класс предоставляет доступ к системным службам аварийной сигнализации. Это позволяет вам запланировать запуск вашего приложения в определенный момент в будущем. Когда срабатывает аварийный сигнал, намерение, которое было зарегистрировано для него, транслируется системой, автоматически запуская целевое приложение, если оно еще не запущено. Зарегистрированные аварийные сигналы сохраняются, пока устройство находится в спящем режиме (и при необходимости могут разбудить устройство, если они отключатся в течение этого времени), но будут удалены, если оно выключено и перезагружено.
Используйте public void set (int type, long triggerAtTime, PendingIntent operation)
, чтобы установить время для его запуска.
Используйте void setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation)
для планирования повторяющегося сигнала тревоги.
Вот полный пример. На самом деле я не помню всех методов календаря, поэтому уверен, что эту часть можно упростить, но это начало, и вы сможете оптимизировать ее позже:
AlarmManager alarm = (AlarmMAnager) Context.getSystemService(Context.ALARM_SERVICE);
Calendar timeOff = Calendar.getInstance();
int days = Calendar.SUNDAY (7 - timeOff.get(Calendar.DAY_OF_WEEK)); // how many days until Sunday
timeOff.add(Calendar.DATE, days);
timeOff.set(Calendar.HOUR, 12);
timeOff.set(Calendar.MINUTE, 0);
timeOff.set(Calendar.SECOND, 0);
alarm.set(AlarmManager.RTC_WAKEUP, timeOff.getTimeInMillis(), yourOperation);
Комментарии:
1. я. я знаю, что мне нужно использовать класс taht, просто не знаю, как заставить его повторяться каждое воскресенье в указанное время
2. @буду ли я обновлять ответ. Это часть того же API AlarmManager. В принципе, вы используете интервал в неделю в 604 800 000 миллиметров)
3. хорошо, итак, как бы я добрался до воскресенья, хотя немного запутался в этом
Ответ №2:
наконец, это правильное решение, если установлено как (sun, tus, fri), вы должны создать три будильника для этих трех дней. следующий код устанавливает будильник каждое воскресенье и отправляет DayOfWeek = 1;
public void setAlarm_sun(int dayOfWeek) {
cal1.set(Calendar.DAY_OF_WEEK, dayOfWeek);
Toast.makeText(getApplicationContext(), "sun " cal1.get(Calendar.DAY_OF_WEEK), 222).show();
Toast.makeText(getApplicationContext(), "Finsh", 222).show();
Intent intent = new Intent(this, SecActivity.class);
PendingIntent pendingIntent0 = PendingIntent.getBroadcast(this, 0,
intent, 0);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 12345,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
Long alarmTime = cal1.getTimeInMillis();
AlarmManager am = (AlarmManager) getSystemService(Activity.ALARM_SERVICE);
// am.setRepeating(AlarmManager.RTC_WAKEUP, alarmTime,7* 24 * 60 * 60 * 1000 , pendingIntent);
am.setRepeating(AlarmManager.RTC_WAKEUP, alarmTime,7* 24 * 60 * 60 * 1000 , pendingIntent);
}