【问题标题】:Adding Event in Android Calendar在 Android 日历中添加事件
【发布时间】:2014-07-24 11:41:35
【问题描述】:
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 日历的代码的 sn-p。代码运行良好。

但是在设备上测试时,指定的事件实际上并没有被添加,也没有出现在日历中。代码完全没有错误,我已经提供了必要的权限。

谁能告诉我到底哪里做错了。

【问题讨论】:

  • 你有没有想过这个问题?我有同样的问题。它只发生在我的公司帐户上,在我的个人帐户上添加就好了。
  • 所以才弄清楚我的情况发生了什么。默认情况下,该事件已添加到联系人的生日和事件日历中。如果我退订那个和美国假期,那么它就起作用了。似乎您传入了一个明确的 mCalId,所以也许这不是您的问题。

标签: android events android-calendar android-syncadapter


【解决方案1】:

如果没有错误,但事件没有出现在日历中, 我怀疑罪魁祸首是mCalId = 1 分配。

一个设备可以有多个日历。不保证 id == 1 的那个是主要的(即使您使用主要的,用户也可能在多个不同的日历中拥有事件 - 例如个人和工作)。

所以,这取决于你想要做什么。您应该:

  • 使用主日历(带有IS_PRIMARY 的日历,但请参阅上面的警告),或者
  • 让用户先选择一个日历(仅当查询Calendars table 时找到多个日历时),然后再使用该calendar_id

【讨论】:

    【解决方案2】:

    也许你使用了错误的 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());
    

    【讨论】:

      猜你喜欢
      • 2011-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-08
      • 1970-01-01
      • 2015-05-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多