например, я хочу, чтобы будильник срабатывал каждое воскресенье в полдень... как мне это сделать?
как настроить диспетчер будильника на срабатывание каждый определенный день недели и время в Android?
Ответы (2)
Используйте класс 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);
наконец, это правильное решение, если установлено как (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);
}