我最担心的是如何在Android CalendarProvider中使用Colors.我可以添加事件,但是当我尝试插入具有特定颜色的事件时,默认日历颜色(浅蓝色)似乎会忽略此首选项.
我想我不确定如何使用颜色.我想知道是否有人可以如此善意地阐明此事.
同时,这是我的代码(Event参数是一个自定义类,我知道名称令人困惑):
public long insert(Event event) throws ParseException{
ContentValues eventValues = new ContentValues();
eventValues.put("calendar_id", 1);
eventValues.put(Events.SYNC_DATA1, event.getId());
eventValues.put(Events.TITLE, event.getTitle());
eventValues.put(Events.DESCRIPTION, event.getTitle());
eventValues.put(Events.EVENT_COLOR, Color.RED);
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());
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
小智 4
好吧,我想那天晚上我已经筋疲力尽了。然而,万一其他人最终来到这里,据我所知,对“日历”->“事件”交互进行简要解释是公平的。
长话短说:事件颜色取决于您放入的日历。如果 events_color 列被日历颜色覆盖,为什么还会有 events_color 列?我希望我知道。
因此,一旦您设置了精美的同步适配器、用户等,您就需要创建一个新日历:
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());
}
Run Code Online (Sandbox Code Playgroud)
请注意,我在 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());
}
Run Code Online (Sandbox Code Playgroud)
现在我将一个事件放入日历中(calendarID 参数)。该事件将以日历的颜色显示。
| 归档时间: |
|
| 查看次数: |
3068 次 |
| 最近记录: |