2013-11-06 2 views
0

Я пытаюсь вставить событие с другим цветом по умолчанию, делая что-то вроде этого:Изменения цвета календаря события по умолчанию

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

Вы можете изменить его, создав новый календарь, потому что цвет отсортирован по календарям. Источник и Как можно найти здесь: Android CalendarProvider Events Color

Edit: как stackoverflow-meta предлагает (спасибо за Kleopatra ссылка), я цитирую original answer потому, что предотвратит стыковку гниль и «немедленно полезно для читателей ". Это было бы бессмысленно, если бы я снова написали этот ответ, или не так ли? Я имею в виду, что мой ответ был просто подумал, чтобы показать людям другого ответ ...

Итак, все нижеследующее является цитатой из Sphaso (я не знаю, как форматировать, что в качестве цитаты содержащего кода):

Ну, наверное, я был сожжен прошлой ночью. Тем не менее, в случае, если кто-то еще окажется здесь, справедливо дать краткое объяснение о взаимодействии 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, в этом случае я» m разбор чего-то типа # 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). Это событие будет отображаться с цветом календаря.

+0

ОК, спасибо :) так хорошо, как это, или я должен попытаться написать очень похожее решение самостоятельно? – lucidbrot

+0

ahh ... не заметил, что ссылка была на сообщение в stackoverflow, мое плохое ;-) Ободренный подход в таком случае должен поставить флаг/проголосовать за вопрос как дубликат, которого вы еще не можете (и я не может судить о содержании). Таким образом, копирование приемлемо, ИМО, вы можете вернуться, как только у вас появится репутация и отметьте вопрос. – kleopatra

Смежные вопросы