AlarmManager时区未与系统时钟

时间:2017-07-05 12:27:49

标签: java android timezone alarmmanager java-calendar

当我在使用闹钟管理器中设置闹钟时,它会立即显示我的闹钟。我意识到这是因为我实际上设置的警报是过去的。

当我使用Java的Calendar.getInstance()与当前时间同步时,它给我一个比我当前时区提前5小时的时间。 奇怪的是,用于运行AlarmManager的任何时钟似乎都领先于相同的数量。

这一事实很明显,当我通过获取当前时间并为其添加x秒数来创建闹钟时,它会在正确的时间关闭,但如果我根据我的手机设置了警报,那么# 39; s时钟,在未来,它被认为是过去。

如何重置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 个答案:

没有答案