从日历中获取事件

我的问题是,我必须制作一个演示应用程序,其中我想阅读谷歌日历的事件,因为我已经手动插入事件的标题,事件的时间和整个事件的详细信息的事件。 现在我需要那些日历中的那些事件。 因为我试图使用gcode(谷歌代码)api提供日历api类。 但我仍然无法读取这些事件..

Solutions Collecting From Web of "从日历中获取事件"

上面的代码非常糟糕(它似乎在ICS中不起作用 – 绝对是列名不同)

这里的页面: http : //developer.android.com/guide/topics/providers/calendar-provider.html

提供了更好的概述。 一个(更简单)的代码来检索日历:

public class CalendarContentResolver { public static final String[] FIELDS = { CalendarContract.Calendars.NAME, CalendarContract.Calendars.CALENDAR_DISPLAY_NAME, CalendarContract.Calendars.CALENDAR_COLOR, CalendarContract.Calendars.VISIBLE }; public static final Uri CALENDAR_URI = Uri.parse("content://com.android.calendar/calendars"); ContentResolver contentResolver; Set calendars = new HashSet(); public CalendarContentResolver(Context ctx) { contentResolver = ctx.getContentResolver(); } public Set getCalendars() { // Fetch a list of all calendars sync'd with the device and their display names Cursor cursor = contentResolver.query(CALENDAR_URI, FIELDS, null, null, null); try { if (cursor.getCount() > 0) { while (cursor.moveToNext()) { String name = cursor.getString(0); String displayName = cursor.getString(1); // This is actually a better pattern: String color = cursor.getString(cursor.getColumnIndex(CalendarContract.Calendars.CALENDAR_COLOR)); Boolean selected = !cursor.getString(3).equals("0"); calendars.add(displayName); } } } catch (AssertionError ex) { /*TODO: log exception and bail*/ } return calendars; } } 

希望这可以帮助!

好吧,我find了如何使用谷歌日历应用程序与Android手机集成的整个概念的答案。

码: –

首先你设置这行将从另一个类forms读取日历事件,你的类是当前的ApplicationSettings.java。

ReadCalendar.readCalendar(ApplicationSettings.this);

 package com.mycalendarevents.android; import java.util.Date; import java.util.HashSet; import java.util.regex.Pattern; import android.content.ContentResolver; import android.content.ContentUris; import android.content.Context; import android.database.Cursor; import android.net.Uri; import android.text.format.DateUtils; public class ReadCalendar { static Cursor cursor; public static void readCalendar(Context context) { ContentResolver contentResolver = context.getContentResolver(); // Fetch a list of all calendars synced with the device, their display names and whether the cursor = contentResolver.query(Uri.parse("content://com.android.calendar/calendars"), (new String[] { "_id", "displayName", "selected"}), null, null, null); HashSet calendarIds = new HashSet(); try { System.out.println("Count="+cursor.getCount()); if(cursor.getCount() > 0) { System.out.println("the control is just inside of the cursor.count loop"); while (cursor.moveToNext()) { String _id = cursor.getString(0); String displayName = cursor.getString(1); Boolean selected = !cursor.getString(2).equals("0"); System.out.println("Id: " + _id + " Display Name: " + displayName + " Selected: " + selected); calendarIds.add(_id); } } } catch(AssertionError ex) { ex.printStackTrace(); } catch(Exception e) { e.printStackTrace(); } // For each calendar, display all the events from the previous week to the end of next week. for (String id : calendarIds) { Uri.Builder builder = Uri.parse("content://com.android.calendar/instances/when").buildUpon(); //Uri.Builder builder = Uri.parse("content://com.android.calendar/calendars").buildUpon(); long now = new Date().getTime(); ContentUris.appendId(builder, now - DateUtils.DAY_IN_MILLIS * 10000); ContentUris.appendId(builder, now + DateUtils.DAY_IN_MILLIS * 10000); Cursor eventCursor = contentResolver.query(builder.build(), new String[] { "title", "begin", "end", "allDay"}, "Calendars._id=" + 1, null, "startDay ASC, startMinute ASC"); System.out.println("eventCursor count="+eventCursor.getCount()); if(eventCursor.getCount()>0) { if(eventCursor.moveToFirst()) { do { Object mbeg_date,beg_date,beg_time,end_date,end_time; final String title = eventCursor.getString(0); final Date begin = new Date(eventCursor.getLong(1)); final Date end = new Date(eventCursor.getLong(2)); final Boolean allDay = !eventCursor.getString(3).equals("0"); /* System.out.println("Title: " + title + " Begin: " + begin + " End: " + end + " All Day: " + allDay); */ System.out.println("Title:"+title); System.out.println("Begin:"+begin); System.out.println("End:"+end); System.out.println("All Day:"+allDay); /* the calendar control metting-begin events Respose sub-string (starts....hare) */ Pattern p = Pattern.compile(" "); String[] items = p.split(begin.toString()); String scalendar_metting_beginday,scalendar_metting_beginmonth,scalendar_metting_beginyear,scalendar_metting_begindate,scalendar_metting_begintime,scalendar_metting_begingmt; scalendar_metting_beginday = items[0]; scalendar_metting_beginmonth = items[1]; scalendar_metting_begindate = items[2]; scalendar_metting_begintime = items[3]; scalendar_metting_begingmt = items[4]; scalendar_metting_beginyear = items[5]; String calendar_metting_beginday = scalendar_metting_beginday; String calendar_metting_beginmonth = scalendar_metting_beginmonth.toString().trim(); int calendar_metting_begindate = Integer.parseInt(scalendar_metting_begindate.trim()); String calendar_metting_begintime = scalendar_metting_begintime.toString().trim(); String calendar_metting_begingmt = scalendar_metting_begingmt; int calendar_metting_beginyear = Integer.parseInt(scalendar_metting_beginyear.trim()); System.out.println("calendar_metting_beginday="+calendar_metting_beginday); System.out.println("calendar_metting_beginmonth ="+calendar_metting_beginmonth); System.out.println("calendar_metting_begindate ="+calendar_metting_begindate); System.out.println("calendar_metting_begintime="+calendar_metting_begintime); System.out.println("calendar_metting_begingmt ="+calendar_metting_begingmt); System.out.println("calendar_metting_beginyear ="+calendar_metting_beginyear); /* the calendar control metting-begin events Respose sub-string (starts....ends) */ /* the calendar control metting-end events Respose sub-string (starts....hare) */ Pattern p1 = Pattern.compile(" "); String[] enditems = p.split(end.toString()); String scalendar_metting_endday,scalendar_metting_endmonth,scalendar_metting_endyear,scalendar_metting_enddate,scalendar_metting_endtime,scalendar_metting_endgmt; scalendar_metting_endday = enditems[0]; scalendar_metting_endmonth = enditems[1]; scalendar_metting_enddate = enditems[2]; scalendar_metting_endtime = enditems[3]; scalendar_metting_endgmt = enditems[4]; scalendar_metting_endyear = enditems[5]; String calendar_metting_endday = scalendar_metting_endday; String calendar_metting_endmonth = scalendar_metting_endmonth.toString().trim(); int calendar_metting_enddate = Integer.parseInt(scalendar_metting_enddate.trim()); String calendar_metting_endtime = scalendar_metting_endtime.toString().trim(); String calendar_metting_endgmt = scalendar_metting_endgmt; int calendar_metting_endyear = Integer.parseInt(scalendar_metting_endyear.trim()); System.out.println("calendar_metting_beginday="+calendar_metting_endday); System.out.println("calendar_metting_beginmonth ="+calendar_metting_endmonth); System.out.println("calendar_metting_begindate ="+calendar_metting_enddate); System.out.println("calendar_metting_begintime="+calendar_metting_endtime); System.out.println("calendar_metting_begingmt ="+calendar_metting_endgmt); System.out.println("calendar_metting_beginyear ="+calendar_metting_endyear); /* the calendar control metting-end events Respose sub-string (starts....ends) */ System.out.println("only date begin of events="+begin.getDate()); System.out.println("only begin time of events="+begin.getHours() + ":" +begin.getMinutes() + ":" +begin.getSeconds()); System.out.println("only date begin of events="+end.getDate()); System.out.println("only begin time of events="+end.getHours() + ":" +end.getMinutes() + ":" +end.getSeconds()); beg_date = begin.getDate(); mbeg_date = begin.getDate()+"/"+calendar_metting_beginmonth+"/"+calendar_metting_beginyear; beg_time = begin.getHours(); System.out.println("the vaule of mbeg_date="+mbeg_date.toString().trim()); end_date = end.getDate(); end_time = end.getHours(); CallHandlerUI.metting_begin_date.add(beg_date.toString()); CallHandlerUI.metting_begin_mdate.add(mbeg_date.toString()); CallHandlerUI.metting_begin_mtime.add(calendar_metting_begintime.toString()); CallHandlerUI.metting_end_date.add(end_date.toString()); CallHandlerUI.metting_end_time.add(end_time.toString()); CallHandlerUI.metting_end_mtime.add(calendar_metting_endtime.toString()); } while(eventCursor.moveToNext()); } } break; } } } 

这里是整个代码将被发布,它将简单地从您的日历中读取每个事件,并在2.2及以上版本的回发url的帮助下:

 Uri.parse("content://com.android.calendar/instances/when").buildUpon(); 

pl在android中find低于2.2的那些版本,并根据你的需要使用那些事件……

我知道这是一个古老的post,但是如果有人在不久的将来需要解决方案的话,我find灵感来优化Akash Takkar给出的答案中find的解决方案。

问题


特别是,我在原始代码中发现了一些问题:

  1. 检索日历事件的循环不成熟
    • 因此,仅检索来自第一日历的事件
  2. 使用eventCursor.moveToFirst()跳过每个日历中的第一个事件; 之后,它会直接移动到while循环中的下一个事件
  3. 在eventCursor中未正确设置日历的ID
    • “Calendars._id =”+ 1,应为“Calendars._id =”+ id,
  4. 其他人很难指定自己的时间范围
  5. 当前的解决方案不是面向对象的,这将具有许多优点
  6. 可读性和文档不是最好的

解决方案


我特此创建了一个Github库,它返回指定时间范围内的事件对象列表,可在以下位置find:

https://github.com/david-laundav/CalendarService

源文件可以在“CalendarService / src / dk / CalendarService”下find。

用例

解决方案本身包含两种不同的方法用于不同目的。

第一个用例:

 CalendarService.readCalendar(class.this) // where class.this is either your class or the context 

此方法将返回事件列表+/- 1天

第二个用例:

您还可以指定自己的时间范围:

 CalendarService.readCalendar(class.this, int days, int hours) 

一个例子可能是:

 CalendarService.readCalendar(class.this, 2, 5) 

这样做将返回+/- 2天和+/- 5小时的事件列表。

该服务已经过测试,但如果您遇到任何问题,请告诉我。

这篇文章有点旧,但这是另一个简单的解决方案,用于在Android中获取与Calendar内容提供商相关的数据:

使用此库: https : //github.com/EverythingMe/easy-content-providers

现在,获取所有日历:

 CalendarProvider calendarProvider = new CalendarProvider(context); List calendars = calendarProvider.getCalendars().getList(); 

每个日历都包含所有字段,因此您可以获得所需的任何信息: id,name,calendarColor,ownerAccount,accountName,calendarAccessLevel,…

或者,获取特定日历的所有事件

 List calendars = calendarProvider.getEvents(calendar.id).getList(); 

还有选项可以获得提醒,参加者,实例

它适用于列表或光标,并有一个示例应用程序,以查看它的外观和工作方式。 事实上,支持所有Android内容提供商,如: 联系人,短信,电话,…所有选项的完整文档: https : //github.com/EverythingMe/easy-content-providers/wiki/Android-providers

希望它有帮助:)

使用此代码获取一天的日历事件。

 public static void readCalendarEvent(Context context) throws ParseException { ContentResolver contentResolver = context.getContentResolver(); Calendar calendar = Calendar.getInstance(); String dtstart = "dtstart"; String dtend = "dtend"; SimpleDateFormat displayFormatter = new SimpleDateFormat("MMMM dd, yyyy (EEEE)"); stime=displayFormatter.format(calendar.getTime()); SimpleDateFormat startFormatter = new SimpleDateFormat("MM/dd/yy"); String dateString = startFormatter.format(calendar.getTime()); long after = calendar.getTimeInMillis(); SimpleDateFormat formatterr = new SimpleDateFormat("hh:mm:ss MM/dd/yy"); Calendar endOfDay = Calendar.getInstance(); Date dateCCC = formatterr.parse("23:59:59 " + dateString); endOfDay.setTime(dateCCC); cursor = contentResolver.query(Uri.parse("content://com.android.calendar/events"), (new String[] { "calendar_id", "title", "description", "dtstart", "dtend","eventTimezone", "eventLocation" }), "(" + dtstart + ">" + after + " and " + dtend + "< " + endOfDay.getTimeInMillis() + ")", null, "dtstart ASC"); /*String[] COLS={"calendar_id", "title", "description", "dtstart", "dtend","eventTimezone", "eventLocation"}; cursor = contentResolver.query( CalendarContract.Events.CONTENT_URI, COLS,null, null, null);*/ gCalendar = new ArrayList(); try { if (cursor.getCount() > 0) { while (cursor.moveToNext()) { GoogleCalendar googleCalendar = new GoogleCalendar(); gCalendar.add(googleCalendar); int calendar_id = cursor.getInt(0); googleCalendar.setCalendar_id(calendar_id); String title = cursor.getString(1); googleCalendar.setTitle(title); String description = cursor.getString(2); googleCalendar.setDescription(description); String dtstart1 = cursor.getString(3); dt=convertDate(dtstart1,"hh:mm:ss"); googleCalendar.setDtstart(dt); String dtend1 = cursor.getString(4); googleCalendar.setDtend(dtend1); String eventTimeZone=cursor.getString(5); googleCalendar.setEventTimeZone(eventTimeZone); String eventlocation = cursor.getString(6); googleCalendar.setEventlocation(eventlocation); } } } catch (AssertionError ex) { ex.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } }