TL; DR - AlarmManager .setRepeating немедленно начинает вместо желаемого будущего времени .. (например, 5 минут теперь)Android Manager повторив Alarm оттеняет немедленно
Поэтому в основном я начинаю менеджер сигнализации и я даю ему время, оставшееся на работу, и по какой-то причине оно срабатывает мгновенно .. пользователь выбирает время из таймера, и я установил на этот раз следующий сигнал тревоги. код ниже:
-это метод get имеет время, оставшееся до тревоги, это используется как triggerInMillis для alarmManager.
/** calculate the time left until the alarm with calendar */
private static long getTimeFromCalendar(final int hourOfDay, final int minute) {
Date dat = new Date();//initializes to now
Calendar cal_alarm = Calendar.getInstance();
Calendar cal_now = Calendar.getInstance();
cal_now.setTime(dat);
cal_alarm.setTime(dat);
cal_alarm.set(Calendar.HOUR_OF_DAY,hourOfDay);
cal_alarm.set(Calendar.MINUTE, minute);
cal_alarm.set(Calendar.SECOND,0);
if(cal_alarm.before(cal_now)){
cal_alarm.add(Calendar.DATE,1);
}
long calAlarm = cal_alarm.getTimeInMillis();
long calNow = cal_now.getTimeInMillis();
long timeLeft = (calAlarm - calNow);
return timeLeft;
}
тогда я называю -startAlarm- метод:
private static void startAlarm(final Enums typeToStart) {
final PendingIntent pendingIntent = GBAlarms.createPendingIntent(OnAlarmReceiver.class, Constants.typeEnum, typeToStart);
final long timeToAlarm = Utils.getTimeToAlarm(typeToStart);
long repeatTime = Constants._24hours;
GBAlarms.createRepeatingAlarm(timeToAlarm, repeatTime, pendingIntent);
}
и, наконец, мой -GBAlarms.class-, где я создаю свои тревоги и ожидающие намерения.
public class GBAlarms {
/** Define our AlarmManager */
private static AlarmManager mgr = (AlarmManager) BaseApplication.getAppContext().getSystemService(Context.ALARM_SERVICE);
/** Create a new PendingIntent */
public static PendingIntent createPendingIntent(final Class destination, @Nullable final String extra, Enums.TeaType type) {
Intent i = new Intent(BaseApplication.getAppContext(), destination);
if (extra != null && type != null) { i.putExtra(extra, type); }
PendingIntent pi = PendingIntent.getBroadcast(BaseApplication.getAppContext(), type.getValue() , i, 0);
return pi;
}
/** Create a new repeating Alarm */
public static void createRepeatingAlarm(final long time, final long repeatTime, final PendingIntent pi) {
mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, time, repeatTime, pi);
}
}
Я не понимаю, почему тревога выскакивает правильно, когда я поставил его в -createRepeatingAlarm- методы, и я отлажена конечно, параметр времени выглядит законен .. если я установить его на 3 минут, 10 минут, он помещает это время в триггер.
может ли кто-нибудь определить мою ошибку? может, я что-то упустил?
благодарит за любую помощь.
будет что-то вроде: mgr.setRepeating (AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + repeatTime, repeatTime, pi) работает лучше? –