Может ли мой AlarmManager запустить первый сигнал тревоги, когда достигнуто установленное время, а не после первого повторения? - PullRequest
0 голосов
/ 20 января 2020

Для моего приложения я хотел бы включать будильник в полночь и периодически каждую следующую полночь для сброса некоторых переменных. Я попытался диспетчер сигнализации, чтобы добиться этого. Возможно ли, что будильник срабатывает в первый раз, когда он достигает полуночи, а не только в следующие ночи? Мой настоящий код работает, но не для того, чего я хочу достичь. Сейчас я установил время и повторил 60 секунд для тестирования.

В моих выходах журнала я получаю, например:

  • 20.01.2020_14: 15: 00 Здесь я хочу АВАРИЙНЫЙ СИГНАЛ
  • 20.01.2020_14 : 16: 00: ТРЕВОГА
  • 20.01.2020_14: 17: 00: ТРЕВОГА

Таким образом, возможно, что сигнал тревоги сработал, в первый раз, когда он достигнет установить время? Или у кого-нибудь есть обходной путь или какие-либо советы или подсказки, как мне этого добиться?

Моя функция установки будильника

public void midnightAlarm() {
 AlarmManager alarmMgr;
        PendingIntent alarmIntent;

        alarmMgr = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(this, MidnightAlarmReceiver.class);
        alarmIntent = PendingIntent.getBroadcast(this, 0, intent, 0);


        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.set(Calendar.HOUR_OF_DAY, 15);
        calendar.set(Calendar.MINUTE, 15);


        alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
                1000 * 60 , alarmIntent);

    }

мой класс приемника:

public class MidnightAlarmReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

           writeToFile("ALARM");
           //reset my Variables

    }
}

1 Ответ

0 голосов
/ 20 января 2020
public void midnightAlarm() {

         AlarmManager alarmMgr;
         PendingIntent alarmIntent;

        alarmMgr = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(this, MidnightAlarmReceiver.class);
        alarmIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);


        // Set the alarm to start at 8:30 a.m.
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);



        alarmMgr.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent);


    }

Приемник

public class MidnightAlarmReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

           GlobalVariables.writeToFile("ALARM");
           midnightAlarmREDO(context);
    }



    public void midnightAlarmREDO(Context context) {

        AlarmManager alarmMgr;
        PendingIntent alarmIntent;

        alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(context, MidnightAlarmReceiver.class);
        alarmIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

// zeit neu berechnen

        alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                SystemClock.elapsedRealtime() +
                        60 * 1000, alarmIntent);


    }
}
...