在安卓日历中添加事件

4
private void setEvent(){        
    long startMilis = 0;
    int mCalId = 1;
    long endMilis = 0;
    Calendar beginTime = Calendar.getInstance();
    beginTime.set(2013, 1, 29, 9, 10);
    startMilis = beginTime.getTimeInMillis();  
    Calendar endTime = Calendar.getInstance();
    endTime.set(2013, 1, 30, 10,10);
    endMilis = endTime.getTimeInMillis();

    ContentResolver cr = getContentResolver();
    ContentValues values = new ContentValues();
    values.put(Events.CALENDAR_ID, mCalId);
    values.put(Events.DTSTART, startMilis);
    values.put(Events.DTEND, endMilis);
    values.put(Events.TITLE,"Special Event");
    values.put(Events.DESCRIPTION, "Group Activity");
    values.put(Events.EVENT_TIMEZONE, "America/Los_Angeles");
    Uri uri = cr.insert(Events.CONTENT_URI, values);
    Toast.makeText(this, "Event Added", Toast.LENGTH_LONG).show();
}

这是我的代码片段,我想要向Android日历添加事件。代码运行良好。
但在设备上测试时,指定的事件实际上没有被添加到日历中。代码完全没有错误,并且我已经提供了必要的权限。
请问有人能告诉我我哪里出错了吗?

你解决了这个问题吗?我也遇到了同样的问题。只有在我的公司账户上才会出现这种情况,在我的个人账户上添加就很顺利。 - yarian
所以我刚刚弄清楚了我的问题。该事件默认添加到联系人的生日和活动日历中。如果我取消订阅,包括美国节假日,则它就可以正常工作。看来您可以传递一个显式的mCalId,因此这可能不是您的问题。 - yarian
2个回答

3
如果没有错误,但是事件仍未出现在日历中, 我会怀疑罪魁祸首是 mCalId = 1 的分配。
一个设备可以有多个日历。不能保证 id == 1 的日历是主要的(即使您使用了主要的日历,用户可能有不同的日历中的事件 - 例如个人和工作)。
因此,这取决于您想要做什么。您应该:
- 使用主要日历(具有 IS_PRIMARY,但请参阅上面的警告),或者 - 当查询日历表时发现超过一个时先让用户选择日历,然后从那时起一直使用该calendar_id

0

可能你使用了错误的Uri,我在我的应用程序中使用的是这个:

    Uri EVENTS_URI = Uri.parse(CalendarContract.Events.CONTENT_URI.toString());
    ContentResolver cr = getActivity().getContentResolver();

    ContentValues values = new ContentValues();

    values.put("calendar_id", 1);       
    values.put(Events.TITLE, recordatorio);
    values.put(Events.ALL_DAY, 1);
    values.put(Events.EVENT_LOCATION, lugar);
    values.put("dtstart", calDate.getTimeInMillis());
    values.put("dtend", calDate.getTimeInMillis());
    values.put(Events.DESCRIPTION, observaciones);
    values.put("availability", 0);
    values.put(Events.HAS_ALARM, true);     
    values.put(Events.EVENT_TIMEZONE, TimeZone.getDefault().toString());

    Uri uri = cr.insert(EVENTS_URI, values);
// to get the Id Event          
    long eventID = Long.parseLong(uri.getLastPathSegment());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接