android - 从原始重复事件中创建异常事件?

标签 android android-contentprovider android-calendar caldav

我发现 Events.CONTENT_EXCEPTION_URI ( here ) 用于制作重复发生的事件。 很难从互联网上找到文档或代码示例。所以我尝试了很多方法

1 作为同步适配器插入

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 返回 null,我没有看到任何异常或任何相关的东西,所以我挖掘 Android 源代码(来自 here)并找出他们使用 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);

但它显示安装失败的日志,我很担心,可能是谷歌不完全支持它,我还列出了 Android 中的所有内容提供程序,我没有任何异常 uri (Events.CONTENT_EXCEPTION_URI) --content://com.android.calendar/exception

抛出异常

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

有人有经验吗?感谢任何帮助:)

亲切的问候

最佳答案

我的一小部分代码:

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) {
}    

关于android - 从原始重复事件中创建异常事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16915993/

相关文章:

Android 通讯录提供商仅获取包含所有电子邮件的电话联系人

java - 在不打开日历的情况下添加日历事件

java - 使用 Android 日历的 setMinDate() 时出现 StackOverflowError

android - Android 上长期持久的 TCP 连接

java - 使用 connectedInstrumentTest 构建 Android 作业不适用于 Jenkins

android - 防止点击默认的蓝色选择

javascript - 参数化选择查询在使用 sqlite 数据库的 Angular js 中不起作用

android 联系人提供程序 : how to set phone number primary

android - android 如何找出隐式 Intent 的 URI 的 MIME 类型?

java - 从给定日期获取周一至周五的周日期