Я обнаружил, что Events.CONTENT_EXCEPTION_URI (здесь ) используется для создания повторяющегося события. Трудно найти документ или пример кода в Интернете. Поэтому я пробую много способов

1 Вставить как SyncAdapter

ContentValues values = new ContentValues();
    values.put(Events.ORIGINAL_INSTANCE_TIME, CaldavGlobalVar.getCurrentTime_());
    values.put(Events.SELF_ATTENDEE_STATUS, status);
    if(!username.equals("")){
        values.put(Events.ORGANIZER, username);
    }
    if(event.getSummarry()!=null){
        values.put(Events.TITLE, event.getSummarry());
    }
    if(event.getDescription()!=null){
        values.put(Events.DESCRIPTION, event.getDescription());
    }
    if(event.getDateStart()!=null){
        values.put(Events.DTSTART, CaldavGlobalVar.convertTIMEtomilisecond(event.getDateStart(), event.getAllDay()));
    }
    

   Uri exceptionUri = Uri. withAppendedPath(Events.CONTENT_EXCEPTION_URI,  String.valueOf(event.getEventId()));
    Uri syncUri = CalendarProvider.asSyncAdapter(exceptionUri, username,context.getResources().getString(R.string.ACCOUNT_TYPE));

    Uri resultUri = context.getContentResolver().insert(syncUri, values);

resultUri return null, я не видел никаких исключений или каких-либо взаимосвязей, поэтому я копаю исходный код Android (из здесь) и узнаю, как они используют Events.CONTENT_EXCEPTION_URI Итак, я меняю

2 Вставьте с помощью «ContentProviderOperation», например this в строке 1003

ContentValues values = new ContentValues();
    values.put(Events.ORIGINAL_INSTANCE_TIME, CaldavGlobalVar.getCurrentTime_());
    values.put(Events.SELF_ATTENDEE_STATUS, 1);
    values.put(Events.STATUS, Events.STATUS_CONFIRMED);

    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
    Uri exceptionUri = Uri.withAppendedPath(Events.CONTENT_EXCEPTION_URI,
            String.valueOf(eventId));
    ops.add(ContentProviderOperation.newInsert(exceptionUri).withValues(values).build());

    mHandler.startBatch(mHandler.getNextToken(), null, CalendarContract.AUTHORITY, ops, 1000);

Но он показывает журнал, что он установлен неудачно, я так беспокоюсь об этом, может быть, Google не поддерживает его полностью, я также перечисляю всех поставщиков контента в Android, у меня нет исключений uri (Events.CONTENT_EXCEPTION_URI) - content://com.android.calendar/exception

Исключение выброшено

java.lang.IllegalArgumentException: Unknown URL content://com.android.calendar/exception

Есть у кого-нибудь опыт? Любая помощь приветствуется :)

С уважением

3
Tai Tran 4 Июн 2013 в 14:53
Никто не отвечает на мой вопрос, поэтому я пытаюсь обойти его по событию исключения и связать его с помощью столбца «SYNC_DATA» ...
 – 
Tai Tran
16 Июн 2013 в 07:42

1 ответ

Лучший ответ

Небольшая часть моего кода:

ContentValues args = new ContentValues();
args.put(CalendarContract.Events.ORIGINAL_INSTANCE_TIME, originalinstancetime);
args.put(CalendarContract.Events.STATUS, status);
Uri.Builder eventUriBuilder = CalendarContract.Events.CONTENT_EXCEPTION_URI.buildUpon();
ContentUris.appendId(eventUriBuilder, originalEventID);
try {
    final Uri resultUri = context.getContentResolver().insert(eventUriBuilder.build(), args);
    int eventID = Integer.parseInt(resultUri.getLastPathSegment());
} catch (Exception e) {
}    
4
basvk 25 Июн 2013 в 19:39
3
С помощью этого кода, как календарь узнает, какая дата была удалена из повторения?
 – 
Benoit
25 Апр 2014 в 18:27
Привет, Басвк, не могли бы вы поделиться идеей о вставке исключения с указанием времени начала и окончания события для дня ..
 – 
Renjith K N
1 Дек 2014 в 18:04
Я попытаюсь объяснить: указав CalendarContract.Events.ORIGINAL_INSTANCE_TIME, вы сообщаете Calendar Provider, для какого конкретного экземпляра вы хотите изменить статус. CalendarContract.Events.CONTENT_EXCEPTION_URI - это специальный Uri, который необходимо использовать для этой цели.
 – 
yshahak
25 Окт 2018 в 08:02