我正在尝试通过执行以下操作来插入具有不同默认颜色的事件:
public static void addReminder(Context context, String title,
String description) {
Intent intent = new Intent(Intent.ACTION_INSERT);
intent.setData(Events.CONTENT_URI);
intent.putExtra(Events.TITLE, title);
intent.putExtra(Events.DESCRIPTION, description);
intent.putExtra(Events.EVENT_COLOR, context.getResources().getColor(R.color.blue_belize_hole));
context.startActivity(intent);
}
但新的日历页面显示为相同的红色(默认颜色)。我怎么能改变它?
答案 0 :(得分:0)
您可以通过创建新日历来更改它,因为颜色按日历排序。来源和方法可以在这里找到: Android CalendarProvider Events Color
修改强> 正如stackoverflow-meta建议的那样(感谢链接kleopatra),我引用original answer,因为这会阻止链接腐烂并“立即对读者有帮助”。当我自己再次写下这个答案时,这是没有意义的,或者是吗?我的意思是,我的回答只是想向人们展示另一个答案......
所以,以下是Sphaso的引用(我不知道如何将其格式化为包含代码的引用):
嗯,我猜我那天晚上被烧掉了。然而,如果有其他人在这里结束,只要我得到它就可以对Calendar->事件互动做一个简短的解释。
长话短说:事件颜色取决于你把它们放入的日历。为什么如果它被Calendar颜色覆盖会有events_color列?我知道,我知道。
所以,一旦你设置了花哨的syncadapter,用户等,你需要创建一个新的日历:
public long insertCalendar(EventType eventType) {
Uri calUri = CalendarContract.Calendars.CONTENT_URI;
ContentValues cv = new ContentValues();
cv.put(CalendarContract.Calendars.ACCOUNT_NAME, "DUMMY");
cv.put(CalendarContract.Calendars.ACCOUNT_TYPE, CalendarContract.ACCOUNT_TYPE_LOCAL);
cv.put(CalendarContract.Calendars.NAME, eventType.getDescription());
cv.put(CalendarContract.Calendars.CALENDAR_DISPLAY_NAME, eventType.getDescription());
cv.put(CalendarContract.Calendars.CALENDAR_COLOR, Color.parseColor(eventType.getColor()));
cv.put(CalendarContract.Calendars.CALENDAR_ACCESS_LEVEL, CalendarContract.Calendars.CAL_ACCESS_OWNER);
cv.put(CalendarContract.Calendars.OWNER_ACCOUNT, true);
cv.put(CalendarContract.Calendars.VISIBLE, 1);
cv.put(CalendarContract.Calendars.SYNC_EVENTS, 1);
//cv.put(CalendarContract.Calendars.CAL_SYNC1, eventType.getId());
calUri = calUri.buildUpon()
.appendQueryParameter(CalendarContract.CALLER_IS_SYNCADAPTER, "true")
.appendQueryParameter(CalendarContract.Calendars.ACCOUNT_NAME, "DUMMY")
.appendQueryParameter(CalendarContract.Calendars.ACCOUNT_TYPE, CalendarContract.ACCOUNT_TYPE_LOCAL)
.build();
Uri result = mContentResolver.insert(calUri, cv);
return Long.parseLong(result.getLastPathSegment());
}
请注意我在CALENDAR_COLOR列中添加了一种颜色,在这种情况下,我正在将#000000之类的内容解析为Color.BLACK。另请注意ACCOUNT_TYPE中的值。从我收集的内容来看,似乎没有另外一种解决方法。
public long insert(Event event, long calendarID) throws ParseException {
EventTypeDal adapter = new EventTypeDal();
EventType et = adapter.GetEventTypeById(event.getFkEventType());
ContentValues eventValues = new ContentValues();
eventValues.put("calendar_id", calendarID);
//eventValues.put(Events.SYNC_DATA1, event.getId());
eventValues.put(Events.TITLE, event.getTitle());
eventValues.put(Events.DESCRIPTION, et.getDescription());
eventValues.put(Events.EVENT_TIMEZONE, "Europe/Rome");
eventValues.put(Events.DTSTART, event.getStart().getTime());
eventValues.put(Events.DTEND, event.getEnd().getTime());
Uri eventUri = mContentResolver.insert(Uri.parse(eventUriString).buildUpon().appendQueryParameter(android.provider.CalendarContract.CALLER_IS_SYNCADAPTER,"true").appendQueryParameter(Calendars.ACCOUNT_NAME, "DUMMY").appendQueryParameter(Calendars.ACCOUNT_TYPE, "accountType").build(), eventValues);
return Long.parseLong(eventUri.getLastPathSegment());
}
现在我将一个事件放在日历中(calendarID param)。此事件将以日历的颜色显示。