【问题标题】:How to read google calendar events in android?如何在android中阅读谷歌日历事件?
【发布时间】:2013-11-27 07:32:48
【问题描述】:

我正在阅读所有 android 日历事件,并且使用下面的代码可以正常工作,但是我想从用户邮件帐户中获取所有 google 日历事件。我该怎么做?任何建议或示例程序都会非常有帮助!

例如:我想获取 xxxxxxxxx@gmail.com(我在 android mobile 中打开的邮件帐户)的事件

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("47:59:59 " + dateString);
        endOfDay.setTime(dateCCC);



        cursor = contentResolver.query(Uri.parse("content://com.android.calendar/calendars"), (new String[] { "calendar_id", "title", "description", "dtstart", "dtend","eventTimezone", "eventLocation" }), "(" + dtstart + ">" + after + " and " + dtend + "<" + endOfDay.getTimeInMillis() + ")", null, "dtstart ASC");
        gCalendar = new ArrayList<GoogleCalendar>();
        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();
        }
    }
}

【问题讨论】:

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


【解决方案1】:

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

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

现在,获取所有日历:

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

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

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

还有获取提醒、与会者、实例的选项。

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

希望它有所帮助:)

【讨论】:

  • 经常性事件问题
  • @sromku 它似乎没有实现设置器...虽然很棒的库
  • 有人可以为此发布一个完整的示例吗?
【解决方案2】:

您可以阅读this page。上面写着如何获取日历信息。

简单地说,

  1. 获取登录安卓设备的账号。 (返回对象是 Account。)
  2. 获取特定的日历列表。
  3. 获取特定时间范围内的事件。 (这是一个日历。)
  4. 对所有日历重复 3。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 2012-12-21
    • 1970-01-01
    相关资源
    最近更新 更多