Часовой пояс AlarmManager не синхронизирован с системными часами

Когда я устанавливаю будильник в Использование диспетчера тревог, он всегда сразу показывает мой будильник. Я понял, что это потому, что будильник, который я на самом деле устанавливал, был в прошлом.

Когда я использую Java Calendar.getInstance() для синхронизации с текущим временем, это дает мне время, которое на 5 часов опережает мой текущий часовой пояс. Странно то, что какие бы часы не использовались для запуска AlarmManager, кажется, впереди на одинаковую величину.

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

Как я могу сбросить часы которые используют alarmManager и java cal, чтобы они соответствовали моему текущему времени?

Вот код, который я использую для создания будильника.

public void setAlarmFromCal(Calendar cal,int type) {
    Calendar calendar = Calendar.getInstance();
    Intent intent = new Intent(mContext, AlarmReceiver.class);
    intent.putExtra("type",type);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, Utility.getUniqueId(), intent, PendingIntent.FLAG_UPDATE_CURRENT);
    alarmManager.setExact(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);
    Toast.makeText(mContext, "was set", Toast.LENGTH_SHORT).show();
}

А вот код для создания Cal, который использует будильник.

public Calendar eventAlarmToCal(Alarm alarm){
    Calendar cal = Calendar.getInstance();
    int hour = Integer.parseInt(alarm.getHour());
    int minute = Integer.parseInt(alarm.getMinute());
    Calendar now = Calendar.getInstance();


    cal.set(Calendar.HOUR_OF_DAY,hour+5);//DISGUSTING!! pLEAse forgive me. I couldn't ifgure out why the time was 5 hours ahead... so id did +5 hours...
    cal.set(Calendar.MINUTE,minute);
    cal.set(Calendar.SECOND,0);

    if(!(alarm.getDay().equals("today"))){
        cal.add(Calendar.DATE,1);
    }

    return cal;
}

Объект тревоги хранит минуты и часы в строках, которые вводятся пользователем.

Alarm alarm4 = new Alarm("17","0","today","0","0");

Конструктор

public Alarm(String hour,String minute,String day,String id,String eventID){
    this.hour = hour;
    this.minute = minute;
    this.day = day;
    this.id = id;
    this.eventID = eventID;
}

0 ответов

Другие вопросы по тегам