Как мне настроить диспетчер тревоги, чтобы срабатывать каждый в определенный день недели и время на Android? - PullRequest
8 голосов
/ 09 апреля 2011

например, я хочу иметь будильник, который будет срабатывать каждое воскресенье в полдень ... как бы я это сделал?

Ответы [ 2 ]

14 голосов
/ 09 апреля 2011

Используйте класс AlarmManager:

http://developer.android.com/reference/android/app/AlarmManager.html

Обзор класса

Этот класс обеспечивает доступ к системным службам сигнализации.Это позволяет запланировать запуск приложения в определенный момент в будущем.Когда срабатывает сигнал тревоги, зарегистрированное для него намерение транслируется системой, автоматически запуская целевое приложение, если оно еще не запущено.Зарегистрированные сигналы тревоги сохраняются, пока устройство находится в спящем режиме (и при желании могут разбудить устройство, если они выключаются в течение этого времени), но будут удалены, если оно выключено и перезагружено.* чтобы установить время для его запуска.

Используйте void setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation) для планирования повторяющегося будильника.

Вот полный пример.Я действительно не помню все методы Calendar, поэтому я уверен, что часть может быть упрощена, но это начало, и вы можете оптимизировать его позже:

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);
0 голосов
/ 14 сентября 2014

наконец, это правильное решение, если установлено (солнце, тус, пт), вы должны создать три тревоги для этих трех дней следующий код устанавливает тревогу каждое воскресенье и отправляет 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);

} 
...