我使用caledarcontract api以编程方式添加了一个日历事件,并获得了eventId。同样,我添加了此事件的提醒,并保存了reminderId。现在我不想要提醒这个事件(或者我想关闭提醒),所以我试图使用reminderId删除提醒,但我无法删除。我试图使用eventId删除提醒,但它无效。
public int AddEventToCalendar(String calendarId, Entity entity) {
// TODO Auto-generated method stub
ContentValues event = new ContentValues();
event.put("calendar_id", calendarId);
event.put("title", entity.description);
event.put("dtstart", System.currentTimeMillis());
event.put("dtend", System.currentTimeMillis() + 3600*1000);
event.put("allDay", 0);
//status: 0~ tentative; 1~ confirmed; 2~ canceled
event.put("eventStatus", 1);
//0~ default; 1~ confidential; 2~ private; 3~ public
event.put("visibility", 0);
//0~ opaque, no timing conflict is allowed; 1~ transparency, allow overlap of scheduling
event.put("transparency", 0);
//0~ false; 1~ true
event.put("hasAlarm", 1);
Uri add_eventUri;
if (Build.VERSION.SDK_INT >= 8) {
add_eventUri = Uri.parse("content://com.android.calendar/events");
} else {
add_eventUri = Uri.parse("content://calendar/events");
}
Uri l_uri = context.getContentResolver().insert(add_eventUri, event);
if(l_uri != null)
{
long eventID = Long.parseLong(l_uri.getLastPathSegment());
return (int) eventID;
}
else
return 0;
}
public int AddReminderOnEvent(Entity entity)
{
if(entity.eventId != 0)
{
ContentValues reminderValues = new ContentValues();
reminderValues.put("event_id", entity.eventId);
reminderValues.put("method", 1);// will alert the user with a reminder notification
reminderValues.put("minutes", 0);// number of minutes before the start time of the event to fire a reminder
Uri reminder_eventUri;
if (Build.VERSION.SDK_INT >= 8) {
reminder_eventUri = Uri.parse("content://com.android.calendar/reminders");
} else {
reminder_eventUri = Uri.parse("content://calendar/reminders");
}
Uri r_uri = context.getContentResolver().insert(reminder_eventUri, reminderValues);
if(r_uri != null)
{
long reminderID = Long.parseLong(r_uri.getLastPathSegment());
return (int) reminderID;
// Toast.makeText(getApplicationContext(), "Event Created Successfully", Toast.LENGTH_LONG).show();
}
else
return 0;
}
else
{
return 0;
}
}
public boolean DeleteReminderOnTask(int eventId, int reminderId) {
// TODO Auto-generated method stub
Uri delete_reminderUri;
if (Build.VERSION.SDK_INT >= 8) {
delete_reminderUri = Uri.parse("content://com.android.calendar/reminders");
} else {
delete_reminderUri = Uri.parse("content://calendar/reminders");
}
delete_reminderUri = ContentUris.withAppendedId(delete_reminderUri, reminderId);
int rows = context.getContentResolver().delete(delete_reminderUri,null , null);
if(rows > 0)
return true;
else
return false;
}
每次执行此代码后,行返回0表示没有行被更改。提醒恰好在适当的时候出现。如何在不删除活动的情况下从日历中删除提醒?
答案 0 :(得分:3)
我不确定您在失败时运行的是哪个SDK版本,但是这段代码(与您的版本基本相同,而不是版本检查)对我有用:
Uri reminderUri = ContentUris.withAppendedId(
CalendarContract.Reminders.CONTENT_URI, reminderId);
int rows = contentResolver.delete(reminderUri, null, null);
我通过查询事件的提醒获得了reminderId
:
String[] projection = new String[] {
CalendarContract.Reminders._ID,
CalendarContract.Reminders.METHOD,
CalendarContract.Reminders.MINUTES
};
Cursor cursor = CalendarContract.Reminders.query(
contentResolver, eventId, projection);
while (cursor.moveToNext()) {
long reminderId = cursor.getLong(0);
int method = cursor.getInt(1);
int minutes = cursor.getInt(2);
// etc.
}
cursor.close();
答案 1 :(得分:0)
这可能不是唯一或最佳方式,但我能想到的是如何删除事件的所有提醒。我不知道如何删除一个提醒。
//What we want to update
ContentValues values = new ContentValues();
values.put(Events.HAS_ALARM, 0);
//We're setting the event to have no alarms
int result = getContentResolver().update(
Events.CONTENT_URI,
values,
Events._ID + " = ?",
new String[]{"44"}
);
不幸的是,这会删除所有提醒,但我不确定Android 14+或大多数日历提供商(例如Exchange)是否真正支持多个提醒。 ICS中的日历应用程序仅允许添加一个提醒(尽管说“添加提醒”)。
如果我使用其他应用程序(如商家日历)添加多个提醒,当我在Exchange中检查时,它只显示提醒。它确实在日历应用中显示多个提醒,但仅在该设备上显示,而不是在其他设备上,因此多个提醒似乎仅限本地。