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

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


person waa1990    schedule 08.04.2011    source источник
comment
Мне было интересно что-то очень похожее. Есть ли способ запускать событие каждые 30 минут или час? Может быть, какая-то работа cron? Просто интересно, что Android может предложить для решения этой проблемы. Спасибо   -  person prolink007    schedule 09.04.2011


Ответы (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);
person Aleadam    schedule 08.04.2011
comment
да, я знаю, что мне нужно использовать этот класс, просто не знаю, как заставить его повторяться каждое воскресенье в указанное время - person waa1990; 09.04.2011
comment
@буду ли я обновить ответ. Это часть того же API AlarmManager. По сути, вы используете интервал в неделю 604 800 000 миллисекунд) - person Aleadam; 09.04.2011
comment
хорошо, как бы я получил воскресенье, хотя я немного смущен этим - person waa1990; 09.04.2011

наконец, это правильное решение, если установлено как (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);

} 
person Mo'nes Qasaimeh    schedule 14.09.2014