我想在日历前一天的第一天设置警报通知。
这是我的代码。
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
ContentValues cv = new ContentValues();
cv.put(DBHelper.COL_VEHICLE_TYPE, vt);
cv.put(DBHelper.COL_DATE, mDisplayDate.getText().toString());
db.update(DBHelper.TABLE_NAME, cv, "_id = ?",new String[]{rowId});
cursor.requery();
String[] parts = mDisplayDate.getText().toString().split("-");
String day = parts[0];
String month = parts[1];
String year = parts[2];
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_YEAR, Integer.parseInt(day)-1); //1-31
cal.set(Calendar.MONTH, Integer.parseInt(month)); //first month is 0!!! January is zero!!!
cal.set(Calendar.YEAR, Integer.parseInt(year));//year...
cal.set(Calendar.HOUR_OF_DAY,23); //HOUR
cal.set(Calendar.MINUTE, 20); //MIN
cal.set(Calendar.SECOND, 0); //SEC
manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
myIntent = new Intent(DriverLicenseActivity.this, AlarmNotificationReceiver.class);
pendingIntent = PendingIntent.getService(DriverLicenseActivity.this, 0,myIntent , 0);
manager.set(AlarmManager.RTC_WAKEUP,cal.getTimeInMillis(),pendingIntent);
getData();
}
})
我像这样使用Integer.parseInt(day)-1来设置真实日历前的日历。
cal.set(Calendar.DAY_OF_YEAR, Integer.parseInt(day)-1);
但是当我运行代码到时间23.20时,它什么也没显示。没有来自Android的通知。
答案 0 :(得分:0)
在您的评论中,您写道DAY_OF_YEAR的值为(1-31)。然后,您使用该值减去1(即0-30)来设置DAY_OF_YEAR。
如果您阅读Calendar.DAY_OF_YEAR
的文档,则会注意到它是YEAR年(而不是MONTH年)中的天数,而一年的第一天是1天(不是0年)。因此DAY_OF_YEAR的值为(1-366)。
此外,您应始终将日历值设置为从最大到最小。因此,您应该设置YEAR,然后设置MONTH,然后设置DAY_OF_MONTH(其值是1-31)。
注意:当日历出现问题时,输出您认为在日历中的日期很有用,以确保它确实是您想要设置的日期。您可以使用以下方法做到这一点: 字符串formattedDate = new SimpleDateFormat(“ yyyy-MM-dd'T'HH:mm:ss.SSSXXX”)。format(calendar.getTime()); Log.v(“ tag”,“ Date is” + formattedDate);