繁体   English   中英

在Android应用中获取Google日历活动

[英]Get Google Calendar Events in an Android App

我刚开始使用Android进行应用开发。 我想从Google日历中提取我的日历活动,然后使用它们在手机的时间内运行计数器。

如:如果活动在下午6点开始,到晚上7点结束:

然后,如果电话时间<下午6点,则打印“时间直到事件”+剩余时间直到事件

 if phone time >6.00 pm but < 7.00 pm then print "Time left" + time till 7.00

有人能指出一些能让我这样做的资源吗? 我主要使用Java进行开发,并希望利用一些简化此操作的可用库。 谢谢!

假设您只想要在一个时间跨度之间发生事件(否则您很快就会遇到太多事件),那么可以使用CalendarContract API的Instances帮助程序(请参阅我关于CalendarContract内容提供程序的博客文章)。

以下是了解事件的方法:

   long begin = // starting time in milliseconds
   long end = // ending time in milliseconds
   String[] proj = 
         new String[]{
               Instances._ID, 
               Instances.BEGIN, 
               Instances.END, 
               Instances.EVENT_ID};
   Cursor cursor = 
         Instances.query(getContentResolver(), proj, begin, end);
   if (cursor.getCount() > 0) {
      // do s.th. meaningful with your result set
   }

关于这个助手的好处是,它负责事件的可见性。 例如,删除/取消的事件在下次同步之前是可见的 - 否则Android无法告诉后端也删除该事件。 你可以自己这样做,但是如果你想考虑一整天的活动,可见性和什么不是,它会变得复杂。 始终使用实例!

public static ArrayList<String> readCalendarEvent(Context context) {
    Cursor cursor = context.getContentResolver()
            .query(
                    Uri.parse("content://com.android.calendar/events"),
                    new String[] { "calendar_id", "title", "description",
                            "dtstart", "dtend", "eventLocation" }, null, 
                    null, null); 
    cursor.moveToFirst();
    // fetching calendars name 
    String CNames[] = new String[cursor.getCount()];

    // fetching calendars id 
    nameOfEvent.clear();
    startDates.clear();
    endDates.clear();
    descriptions.clear();
    for (int i = 0; i < CNames.length; i++) {

        nameOfEvent.add(cursor.getString(1));
        startDates.add(getDate(Long.parseLong(cursor.getString(3))));
        endDates.add(getDate(Long.parseLong(cursor.getString(4))));
        descriptions.add(cursor.getString(2));
        CNames[i] = cursor.getString(1);
        cursor.moveToNext();

    } 
    return nameOfEvent;
} 

我相信这就是你想要的:

Cursor cursor = cr.query(Uri.parse("content://calendar/events"), new String[]{ "calendar_id", "title", "description", "dtstart", "dtend", "eventLocation" }, null, null, null);         
//Cursor cursor = cr.query(Uri.parse("content://calendar/calendars"), new String[]{ "_id", "name" }, null, null, null);
String add = null;
cursor.moveToFirst();
String[] CalNames = new String[cursor.getCount()];
int[] CalIds = new int[cursor.getCount()];
for (int i = 0; i < CalNames.length; i++) {
    CalIds[i] = cursor.getInt(0);
    CalNames[i] = "Event"+cursor.getInt(0)+": \nTitle: "+ cursor.getString(1)+"\nDescription: "+cursor.getString(2)+"\nStart Date: "+new Date(cursor.getLong(3))+"\nEnd Date : "+new Date(cursor.getLong(4))+"\nLocation : "+cursor.getString(5);
    if(add == null)
        add = CalNames[i];
    else{
        add += CalNames[i];
    }           
    ((TextView)findViewById(R.id.calendars)).setText(add);

    cursor.moveToNext();
}
cursor.close();

学分:@Vinay

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM