Android:日历提供商 - >如何添加非重复日历事件(全天或有一些开始和持续时间)?

时间:2016-01-02 14:44:51

标签: android calendar google-calendar-api android-calendar

我花了几个小时尝试使用日历提供程序将日历事件添加到主日历中,但没有运气。

例如:

RewriteEngine on
RewriteCond %{ENV:GEO_COUNTRY} ^usa$ [NC]
RewriteRule ^ - [F,L]

有人可以在给定的日历中提供插入事件的工作示例吗?

我试图找到一些我在互联网上找到的例子,但是没有一个对我不起作用。

非常感谢您的任何建议。

1 个答案:

答案 0 :(得分:0)

查看CalendarContract.Events,列出了添加新活动所需的字段。

另请注意,时间戳以毫秒为单位,而不是以秒为单位。您的示例事件将在1970年的某个地方举行。

以下值会将当前时间的一小时事件插入ID为1的日历中。

ContentValues values = new ContentValues();
long now = System.currentTimeMillis();
values.put(CalendarContract.Events.DTSTART, now);
values.put(CalendarContract.Events.DTEND, now + 3600*1000 /* one hour later */);
values.put(CalendarContract.Events.TITLE, "TEST");
values.put(CalendarContract.Events.DESCRIPTION, "DESC");
values.put(CalendarContract.Events.EVENT_TIMEZONE, TimeZone.getDefault().getID());
// default calendar
values.put(CalendarContract.Events.CALENDAR_ID, 1);
getContentResolver().insert(CalendarContract.Events.CONTENT_URI, values);

请注意,可能没有ID为1的日历。您应首先查找现有日历(确保只查找可写日历)。

要插入全天活动,请确保DTSTARTDTEND可被24 * 3600 * 1000(即常规日的毫秒数)整除,并设置ALL_DAY1

请勿使用DURATION,这仅适用于重复发生的事件。

更新

我已经添加了两行来完成该示例。我刚刚测试了这段代码。给出的示例适用于我,并完全按照它应该做的那样。

确保您撰写的日历存在且可见。

另请确保您的AndroidManifest.xml包含以下条目:

<uses-permission android:name="android.permission.READ_CALENDAR"/>
<uses-permission android:name="android.permission.WRITE_CALENDAR"/>

如果您在模拟器中进行测试或设备已植根,则可以通过在设备(或模拟器)上的shell上运行以下命令来验证事件是否存在:

cd /data/data/com.android.providers.calendar/databases/
sqlite3 calendar.db --line "select * from events where title='TEST' and description='DESC'"

为了完整起见,这是我的Android 5.1模拟器上返回的命令(在事件同步之前):

                  _id = 18172
             _sync_id = 
                dirty = 1
             mutators = com.example.calendartest
           lastSynced = 0
          calendar_id = 1
                title = TEST
        eventLocation = 
          description = DESC
           eventColor = 
     eventColor_index = 
          eventStatus = 
   selfAttendeeStatus = 0
              dtstart = 1452004529497
                dtend = 1452008129497
        eventTimezone = Europe/Amsterdam
             duration = 
               allDay = 0
          accessLevel = 0
         availability = 0
             hasAlarm = 0
hasExtendedProperties = 0
                rrule = 
                rdate = 
               exrule = 
               exdate = 
          original_id = 
     original_sync_id = 
 originalInstanceTime = 
       originalAllDay = 
             lastDate = 1452008129497
      hasAttendeeData = 0
      guestsCanModify = 0
guestsCanInviteOthers = 1
   guestsCanSeeGuests = 1
            organizer = test@example.com
          isOrganizer = 
              deleted = 0
     eventEndTimezone = 
     customAppPackage = 
         customAppUri = 
              uid2445 = 
           sync_data1 = 
           sync_data2 = 
           sync_data3 = 
           sync_data4 = 
           sync_data5 = 
           sync_data6 = 
           sync_data7 = 
           sync_data8 = 
           sync_data9 = 
          sync_data10 = 

日历1是由test@example.com拥有的测试日历。