我正在尝试将事件添加到日历,并在提醒开关已打开的情况下添加提醒。我设法通过提醒将事件添加到日历中,但没有触发警报。
这是我开始日期的方式。
String dateTimeString = dateEditText.getText().toString() + timeEditText.getText().toString();
SimpleDateFormat format = new SimpleDateFormat("MMM dd, yyyyHH:mm", Locale.getDefault());
Date date = format.parse(dateTimeString);
long dateTimeInMillis = Objects.requireNonNull(date).getTime();
Calendar beginTime = Calendar.getInstance();
beginTime.setTimeInMillis(dateTimeInMillis);
日期是从datePickerDialog
获取的,我以(MMM dd, yyyy)
的格式获取日期,而时间是从timePickerDialog
的{{1}}格式获取的。
因此,上面的代码将日期和时间结合起来,并将其转换为毫秒。
这是将事件添加到日历的完整代码
(HH:mm)
try {
String eventTitle = nameEditText.getText().toString();
String dateTimeString = dateEditText.getText().toString() + timeEditText.getText().toString();
SimpleDateFormat format = new SimpleDateFormat("MMM dd, yyyyHH:mm", Locale.getDefault());
Date date = format.parse(dateTimeString);
long dateTimeInMillis = Objects.requireNonNull(date).getTime();
Calendar beginTime = Calendar.getInstance();
Calendar endCalendar = Calendar.getInstance();
beginTime.setTimeInMillis(dateTimeInMillis);
ContentValues event = new ContentValues();
event.put(CalendarContract.Events.CALENDAR_ID, 1);
event.put(CalendarContract.Events.TITLE, eventTitle);
event.put(CalendarContract.Events.DTSTART, beginTime.getTimeInMillis());
event.put(CalendarContract.Events.DTEND, endCalendar.getTimeInMillis());
event.put(CalendarContract.Events.HAS_ALARM, true);
event.put(CalendarContract.Events.EVENT_TIMEZONE, "UTC");
Uri uri = getContentResolver().insert(CalendarContract.Events.CONTENT_URI, event);
if (reminderState == REMINDER_ON) {
Long eventId = Long.parseLong(Objects.requireNonNull(uri).getLastPathSegment());
ContentValues reminder = new ContentValues();
reminder.put(CalendarContract.Reminders.EVENT_ID, eventId);
reminder.put(CalendarContract.Reminders.METHOD, CalendarContract.Reminders.METHOD_ALERT);
reminder.put(CalendarContract.Reminders.MINUTES, reminderTime);
getContentResolver().insert(CalendarContract.Reminders.CONTENT_URI, reminder);
}
} catch (Exception e) {
e.printStackTrace();
}
是用户输入int,表示警报消失前的分钟数。
将事件添加到日历后,我在google日历应用中注意到,该事件显示该事件具有通知提醒,但未触发该通知。
在编写此代码之前,我尝试过将事件添加到具有提醒功能的日历中,该操作可以完美运行。将事件添加到日历后,提醒几乎立即被触发。
这是该代码
reminderTime
我怀疑问题出在我如何获得Calendar startcalendar = Calendar.getInstance();
Calendar endcalendar = Calendar.getInstance();
event.put(CalendarContract.Events.CALENDAR_ID, 1);
event.put(CalendarContract.Events.TITLE, EventTitle);
event.put(CalendarContract.Events.DTSTART, startcalendar.getTimeInMillis());
event.put(CalendarContract.Events.DTEND, endcalendar.getTimeInMillis());
event.put(CalendarContract.Events.HAS_ALARM, true);
event.put(CalendarContract.Events.EVENT_TIMEZONE, "GMT-05:00");
Uri url = getContentResolver().insert(CalendarContract.Events.CONTENT_URI, event);
long eventId = Long.parseLong(url.getLastPathSegment());
ContentValues reminder = new ContentValues();
reminder.put(CalendarContract.Reminders.EVENT_ID, eventId);
reminder.put(CalendarContract.Reminders.MINUTES, 10);
reminder.put(CalendarContract.Reminders.METHOD, CalendarContract.Reminders.METHOD_ALERT);
getContentResolver().insert(CalendarContract.Reminders.CONTENT_URI, reminder);
上,但是我无法告知我做错了什么。希望你们能帮上忙。谢谢。