Android: будильник будет проигрываться каждые 30 минут и начинаться с 12:30.

Здесь я собираюсь использовать службу будильника, чтобы проигрывать будильник каждые 30 минут. Прямо сейчас я настроил его на воспроизведение каждые 10 секунд с каждого запуска.

Вот код:

@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.settings_layout);


    Intent myIntent = new Intent(SettingsActivity.this, MyAlarmService.class);
    pendingIntent = PendingIntent.getService(SettingsActivity.this, 0, myIntent, 0);

    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);

    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());

    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 10*1000, pendingIntent);

}

Теперь проблема в том, что я хочу запустить будильник с 12:30, а не с момента запуска приложения, и он должен повторяться каждые 30 минут. например 1:00, 1:30, 2:00. . . и т.д

Итак, какие изменения я должен сделать в своем коде?


person Shreyash Mahajan    schedule 06.04.2012    source источник
comment
Вам нужно создать службу, которая будет работать в фоновом режиме вашего приложения. Таким образом, если вы выйдете из своего приложения, служба продолжит работу и выполнит ваш код в соответствии с вашей логикой.   -  person Suvam Roy    schedule 06.04.2012
comment
@Suvam Рой, я знаю это все. Но хочу узнать, как настроить, чтобы будильник включался с 12:30 и проигрывался каждые 30 минут.   -  person Shreyash Mahajan    schedule 06.04.2012
comment
@iDroidExplorer: см. этот пост, возможно, он будет полезенИспользование Alarmmanager для запуска службы в определенное время   -  person ρяσѕρєя K    schedule 06.04.2012
comment
@imrankhan: привет, спасибо. Я думаю, это будет работать. Но просто задать вам вопрос. если я установил час как 12 и минуту как 30, и если я установлю приложение на устройство в 1:29, то будет ли он воспроизводить будильник в 1:30 ???   -  person Shreyash Mahajan    schedule 06.04.2012
comment
@imrankhan: Пожалуйста, послушайте свой ответ, чтобы я мог его принять.   -  person Shreyash Mahajan    schedule 06.04.2012
comment
@iDroidExplorer: Спасибо, что происходит в этом случае: если я установил час как 12 и минуту как 30, и если я установлю приложение на устройстве в 1:29, то будет ли будильник воспроизводиться в 1:30?   -  person ρяσѕρєя K    schedule 06.04.2012
comment
@ Я немного обновил код, и теперь он работает так, как я хочу. Я также установил условие, например, пока служба будет звонить, там я поставил условие времени, например, если время 12:30, тогда он будет воспроизводить будильник, иначе нет. Итак, я решил проблему так.   -  person Shreyash Mahajan    schedule 06.04.2012
comment
@iDroidExplorer: это здорово. извините за поздний ответ, я не получил ваш текст, потому что вы пропустили мое имя после @   -  person ρяσѕρєя K    schedule 07.04.2012


Ответы (5)


Чтобы запустить службу в определенное время. см. этот пост, может быть полезным:

Использование Alarmmanager для запуска службы в определенное время

person ρяσѕρєя K    schedule 06.04.2012

Установите начальное время будильника на 12:30, используя Установить метод.

Когда сработает будильник, установите время следующего будильника и продолжайте делать это до тех пор, пока он вам больше не понадобится.

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

person Kuffs    schedule 06.04.2012

Попробуйте

И использовать в первый раз -

Попробуйте другой

person Suvam Roy    schedule 06.04.2012

Наивный подход:

  1. Запустите контекст, который будет выполняться всегда, например Thread в < href="http://developer.android.com/reference/android/app/Service.html" rel="nofollow">Служба.
  2. Рассчитайте отметку времени, когда вы хотите, чтобы следующее оповещение звучало, используя дата и поместите ее в "long alertTimestamp".
  3. В цикле вычислите отметку времени прямо сейчас, используя Date и поместите его в «long nowTimestamp».
  4. Если nowTimestamp ‹ alertTimestamp, перевести поток в спящий for (alertTimestamp - nowTimestamp).
  5. В противном случае подайте звуковой сигнал и пересчитайте alertTimestamp, повторите.

Удостоверьтесь, что вы ловите уведомления о прерываниях протектора изящно, это ключ к прерыванию таймера.

Надеюсь, это было полезно.

person Lennart Rolland    schedule 06.04.2012

Для повторения каждые 30 минут вам нужно будет добавить это в свой код:

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000*60*30, pendingIntent); //millisecs*seconds*minutes

Но я еще не понял, как начать в определенное время.

person Nick    schedule 08.12.2013