0

我刚开始使用 Android 进行应用程序开发。我想从谷歌日历中提取我的日历事件,然后用它们来计算手机时间。

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

然后如果电话时间<6.00 pm,则打印“距离事件的时间”+距离事件的时间

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

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

4

3 回答 3

1

假设您只希望在时间跨度之间发生事件(否则您很快就会得到太多事件),那么要走的路是使用 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 无法告诉后端也删除那里的事件。你可以自己这样做,但如果你想考虑全天的事件、可见性等等,它就会变得复杂。始终使用实例!

于 2013-03-23T21:19:26.897 回答
1
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;
} 
于 2014-10-09T07:43:01.723 回答
0

我相信这就是你想要的:

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

于 2013-03-22T22:26:30.383 回答