Как запустить функцию андроида каждые 15 минут, и особенно на 15-минутной отметке каждый день?

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

Как настроить диспетчер аварийных сигналов для выполнения так, чтобы функция выполнялась через каждые 15 минут, например 8:00, 8:15, 8:30, 8:45, 9:00 каждый день, независимо от времени, когда Приложение запускается.

Возьмем пример, если скажем, что я начал основную деятельность моего приложения в 7:47, и я хотел бы, чтобы будильник начинался в 8:00, а затем вместе с 8:15, 8:30 и т. Д. … как мне это сделать? ? Я был бы очень признателен за любые предложения.

Вы должны настроить два диспетчера аварийных сигналов. Для первого задайте время запуска, вычислив время останова в соответствующее время (например, 8:00 am). И после этого вы должны создать еще один диспетчер аварийных сигналов внутри вашего первого диспетчера аварийных сигналов, который будет запускаться каждые 15 минут.

Для расчета времени для установки первого диспетчера аварийных сигналов используйте следующий код:

Calendar c = Calendar.getInstance(); int m = calendar.get(Calendar.MINUTE); long start = System.currentTimeMillis(); int remain=0; if (m<15) { remain = 15-m; } else if (m<30) { remain = 30-m; } else if (m<45) { remain = 45-m; } else { remain = 60-m; } remain=start + remain*60*1000// convert it to milisecond and plus it to current time; 

редактировать

И после этого вы можете использовать следующий код для настройки первого диспетчера аварийных сигналов:

  AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(context, FirstReceiver.class); PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0); am.set(AlarmManager.RTC_WAKEUP,remain, pi); 

Так что теперь в вашем классе FirstReceiver сделайте что-нибудь вроде:

 public class FirstReceiver extends BroadcastReceiver { //do what ever you want + code bellow to setup second alarm manager Intent intent = new Intent(this, SecAlarm.class); PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, 0); AlarmManager am= (AlarmManager)getSystemService(Context.ALARM_SERVICE); am.setRepeating(AlarmManager.ELAPSED_REALTIME,SystemClock.elapsedRealtime(), 15*60*60,pendingIntent); } 

Лучше устанавливать будильник каждый раз, когда вы хотите с интервалом в один день

 public void setAlarm(Context context) { AlarmManager am =( AlarmManager)context.getSystemService(Context.ALARM_SERVICE); Intent i = new Intent(context, Alarm.class); PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0); am.setRepeating(AlarmManager.RTC_WAKEUP, yourTimeInMilisecond, 24 * 60 * 60 * 1000, pi); // Millisec * Second * Minute } 

Здесь yourTimeInMillisecond – это время, когда вы хотите установить будильник, например, если вы хотите настроить будильник на завтра 9 утра, тогда это будет:

 Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, 9); calendar.set(Calendar.MINUTE, 0); calendar.add(Calendar.DAY_OF_YEAR, 1); long yourTimeInMilisecond = calendar.getTimeInMillis(); 

Надеюсь, это сработает для вас 🙂

 PendingIntent pendingIntent = PendingIntent.getBroadcast( this.getApplicationContext(), 234324243, intent, 0); AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (time limits), pendingIntent);