2013-07-22 8 views
5

私はAndroidのCalendarProviderで色を使用する方法について最も混乱しています。イベントを正しく追加できますが、特定の色を挿入しようとすると、この設定はデフォルトのカレンダーの色(薄い青色)では無視されるようです。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()); 
} 

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

答えて

3

もう、私は他の夜に燃え尽きたと思います。しかし、他の誰かがここで終わった場合、カレンダー - >イベントのやりとりについて簡単に説明しておきます。

ロングストーリー:イベントの色は、入力したカレンダーによって異なります。カレンダーの色でオーバーライドされると、events_color列が表示されるのはなぜですか?私は私が知っていたwhish。

あなたはあなたの空想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)内にイベントを配置しています。このイベントはカレンダーの色で表示されます。

1

EVENT_COLORの代わりにEvents.EVENT_COLOR_KEY(読み取り専用)を使用する必要があります。使用する値はTYPE_EVENTタイプのColorsColumns tableのCOLOR_KEYである必要があります。

関連する問題