Вопрос по alarmmanager, service, android, android-alarms – Android: будильник воспроизводится каждые 30 минут и начинается с 12:30

1

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

Вот код:

<code>@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);

}
</code>

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

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

@iDroidExplorer: см. этот пост может быть полезнымUsing Alarmmanager to start a service at specific time ρяσѕρєя K
Вы должны создать сервис, который будет работать в фоновом режиме вашего приложения. Таким образом, если вы выйдете из своего приложения, служба продолжит работу и выполнит код в соответствии с вашей логикой. Suvam Roy
@ Сувам Рой, я знаю, что все. Но вы хотите знать, как установить, что будильник должен начинаться с 12:30 и включаться каждые 30 минут. iDroid Explorer
@imrankhan: эй, спасибо. Я думаю, что это будет работать. Но просто задайте вам вопрос. если я установил час как 12, а минуту как 30, и если я установлю приложение на устройстве в 1:29, то будет ли воспроизводиться будильник в 1:30 ??? iDroid Explorer
@imrankhan: Пожалуйста, оставьте свой ответ услышать, чтобы я мог принять его. iDroid Explorer

Ваш Ответ

5   ответов
2

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

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

Спасибо за ответ. Это работает, как я хочу. iDroid Explorer
0

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

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

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

1

Попытайся

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

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

Спасибо за ответ. iDroid Explorer
1

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

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

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

Спасибо за ответ. iDroid Explorer
1

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

  1. Start a context that will always run, such as a Thread in a Service.
  2. Calculate the timestamp of the time you want the next alert to ring using Date and put it in "long alertTimestamp".
  3. In a loop, calculate the timestamp right now using Date and put it in "long nowTimestamp" .
  4. If nowTimestamp < alertTimestamp, put the thread to sleep for (alertTimestamp - nowTimestamp).
  5. Else sound the alert and recalculate alertTimestamp, repeat.

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

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

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

Похожие вопросы