2012-04-06 2 views
1

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

Вот код:

@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. , , и т. д.

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

+0

Вам необходимо создать службу, которая будет работать в вашем приложении. Таким образом, если вы выйдете из своего приложения, служба будет работать и будет выполнять ваш код в соответствии с вашей логикой. –

+0

@Suvam Roy i kknow это все.Но вы хотите знать, как установить, что будильник должен начинаться с 12:30 и играть каждые 30 минут. –

+0

@iDroidExplorer: см. Это сообщение, возможно, полезно [Использование Alarmmanager для запуска службы в определенное время] (http://stackoverflow.com/questions/3052149/using-alarmmanager-to-start-a-service-at-specific-time) –

ответ

1

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

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

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

+0

Спасибо за ответ. –

1

Наивный подход будет:

  1. Start контекст, который всегда будет работать, например, как Thread в Service ,
  2. Рассчитайте отметку времени, в течение которой вы хотите, чтобы следующее оповещение было отправлено с помощью Date и поместило его в «long alertTimestamp».
  3. В цикле вычислите временную метку прямо сейчас, используя Date и поместите ее в «long nowTimestamp».
  4. Если nowTimestamp < alertTimestamp, поставьте нить в sleep для (alertTimestamp - nowTimestamp).
  5. Else звук предупреждения и пересчет alertTimestamp, повторите.

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

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

+0

Спасибо за ответ. –

0

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

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

Но я не выяснить, как начать в конкретных время еще.

Смежные вопросы