Итак, я устанавливаю 5 будильников, используя классы AlarmManager + Calender и т. Д., Как обычно, будильник должен срабатывать в [04:18] - [12:20] - [15:35] - [18:58] -[20:28] Каждый день , если мое текущее время меньше, чем [04:18], тогда все будильники стреляют без проблем, только они стреляют с опозданием примерно на 30 секунд, что я обнаружил, что Android делает это специальноиз-за RTC_Wakeup требуется больше батареи и т. д., НО скажем, если мое текущее время около [15:35] <текущее время <[18:58] </strong>, теперь все онитревоги, которые меньше моего текущего времени => [04:18 -> 15:35] будут стрелять или сразу сообщать, почему это так?
public void setAlarms (){
prayerTimeList.set(0, "04:18");
prayerTimeList.set(1, "12:20");
prayerTimeList.set(2, "15:35");
prayerTimeList.set(3, "18:58");
prayerTimeList.set(4, "20:28");
AlarmManager alarmMgr;
PendingIntent alarmIntent[] = new PendingIntent[prayerTimeList.size()];
SimpleDateFormat format = new SimpleDateFormat("HH:mm");
Calendar calendar[] = new Calendar[prayerTimeList.size()];
Date dates[] = new Date[5];
alarmMgr = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
Intent intent[] = new Intent[prayerTimeList.size()];
for (int i = 0; i < prayerTimeList.size(); i++) {
intent[i] = new Intent(this, Alarm.class);
intent[i].putExtra("alarm", prayerTimeList.get(i));
intent[i].setAction(i + "");
calendar[i] = Calendar.getInstance();
//calendar[i].setTimeInMillis(System.currentTimeMillis());
calendar[i].set(Calendar.HOUR_OF_DAY, Integer.parseInt(prayerTimeList.get(i).substring(0, 2)));
calendar[i].set(Calendar.MINUTE, Integer.parseInt(prayerTimeList.get(i).substring(3, prayerTimeList.size())));
alarmIntent[i] = PendingIntent.getBroadcast(this, i, intent[i], 0);
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar[i].getTimeInMillis(),
AlarmManager.INTERVAL_DAY, alarmIntent[i]);
}
Это трансляцияРесивер
public class Alarm extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
MediaPlayer mp = MediaPlayer.create(context, R.raw.aaa);
mp.setLooping(false);
mp.start();
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
NotificationManager notificationManagers;
NotificationChannel notificationChannels[] = new NotificationChannel[5];
Intent intents[] = new Intent[5];
PendingIntent pendingIntents[] = new PendingIntent[5];
Notification.Builder builders[] = new Notification.Builder[5];
notificationManagers = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
for (int i = 0; i < 5; i++) {
if (Integer.parseInt(intent.getAction()) == i) {
notificationChannels[i] = new NotificationChannel(i + "", i + "", NotificationManager.IMPORTANCE_DEFAULT);
notificationManagers.createNotificationChannel(notificationChannels[i]);
intents[i] = new Intent(context, MainActivity.class);
pendingIntents[i] = PendingIntent.getActivity(context, i, intents[i], 0);
builders[i] = new Notification.Builder(context, i + "")
.setContentTitle(i + "")
.setContentText("Im fine thank you ?")
.setSmallIcon(R.drawable.ic_search_black_24dp)
.setContentIntent(pendingIntents[i]);
notificationManagers.notify(i, builders[i].build());
break;
}
}
if (mp != null && !mp.isPlaying()) {
mp.stop();
}
}
}
}