Android CalendarProvider 事件颜色

标签 android colors calendar

我最困惑的是如何在 Android CalendarProvider 中使用颜色。我可以正常添加事件,但是当我尝试插入具有特定颜色的事件时,默认日历颜色(浅蓝色)似乎忽略了此首选项。

我想我不太确定颜色是如何使用的。我想知道是否有人可以对此事有所了解。

同时,这是我的代码(事件参数是一个自定义类,我知道这个名字会让人混淆):

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());
}

谢谢。

最佳答案

嗯,我想那天晚上我精疲力竭了。然而,如果其他人最终来到这里,就我所知,对 Calendar->Events 交互做一个简短的解释是公平的。

长话短说:事件颜色取决于您放入它们的日历。如果它被日历颜色覆盖,为什么会有 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 参数)。此事件将以日历的颜色显示。

关于Android CalendarProvider 事件颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17791178/

相关文章:

css - 当 3 位数字就足够时,使用 6 位 HTML 颜色代码是否有任何技术优势?

group-by - 如何在 ionic 2 中按月对项目进行分组?

java - 如何从rxjava链调用不可观察的代码

带有十六进制颜色的 R 散点图

android - 用矩形扩展类

javascript - 在 JavaScript 中解析 CSS 颜色的最有效方法是什么?

java - 如何找到我单击了哪个日历的按钮?

java - 日历 getTimeInMillis 相差 1 小时

java - android 中的严格性及其用途是什么

android - 我应该在创建通知之前调用 WakeLock 吗?