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

#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);

}