6

Android CalendarProvider で Colors を使用する方法について、私は最も混乱しています。イベントを追加できますが、特定の色のイベントを挿入しようとすると、デフォルトのカレンダーの色 (水色) でこの設定が無視されるようです。

色がどのように使われているのか正確にはわからないと思います。誰かがその問題に光を当てるほど親切にしてくれないだろうか.

一方、これが私のコードです(イベントパラメータはカスタムクラスです。名前がわかりにくいことはわかっています):

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

ありがとうございました。

4

2 に答える 2

4

ええと、私は先日燃え尽きたと思います。それでも、他の誰かがここにたどり着いた場合に備えて、Calendar->Events の相互作用について、私が理解している範囲で簡単に説明するのが公平です。

簡単に言うと、イベントの色は、それらを入れたカレンダーによって異なります。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 パラメータ)。このイベントは、カレンダーの色で表示されます。

于 2013-07-24T08:28:18.123 に答える