当我在使用闹钟管理器中设置闹钟时,它总是会立即显示我的闹钟。我意识到这是因为我实际设置的警报是过去的。
当我使用 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;
}