アラームマネージャーを使用してアラームを設定すると、常にすぐにアラームが表示されます。これは、実際に設定していたアラームが過去のものだったことが原因であることに気付きました。
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;
}