Почему в Java Android автоматически срабатывает сигнал тревоги, установленный до текущего времени? - PullRequest
0 голосов
/ 23 мая 2018

Итак, я устанавливаю 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();

            }


        }

    }
}
...