如何区分假期和生日以及用户创建的全天活动

时间:2016-10-23 09:59:37

标签: android android-calendar android-contentresolver

我正在开发一款能够将所有用户活动和日历带到应用的应用。 但我希望区分用户创建的全天活动,以及自动添加到日历中的活动,如生日或假日。

我得到了所有不同的日历:

cursor = contentResolver.query(Uri.parse("content://com.android.calendar/calendars"),
            (new String[]{Calendars._ID, Calendars.CALENDAR_DISPLAY_NAME, Calendars.CALENDAR_ACCESS_LEVEL}), null, null, null);

和这样的事件:

Cursor eventCursor = contentResolver.query(builder.build(),
                new String[]{"title", "begin", "end", "allDay"}, "(" + Events.CALENDAR_ID + " = ?)",
                new String[]{String.valueOf(userCalendar.id)}, "startDay ASC, startMinute ASC");

此外,有人可以指导我查看可用的谷歌日历和活动字段列表吗? 出于某种原因,我无法在任何地方找到它们......

由于

2 个答案:

答案 0 :(得分:0)

现在好吧,我只是根据访问级别

过滤掉了
 if (userCalendar.accessLevel != Calendars.CAL_ACCESS_READ)

答案 1 :(得分:0)

您无法直接将事件区分为生日,假日或用户创建的事件。 但我做了一个解决方法,它用于我的应用LinkedOut根据事件组织联系人。所以我只想要实际的事件而不是生日。

所以我只拍摄了有地点的事件,因为我想要的事件会有位置。

如果您只想要生日,请过滤包含"生日"在事件名称中, 所有其他活动,没有位置,没有生日'在他们的名下将是假期。

我知道它可能并不总是正确的,但它现在可以使用。

获取具有位置的事件的代码

public void getDataFromEventTable() {
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_CALENDAR) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CALENDAR}, 121);
    }
    Cursor cur = null;
    ContentResolver cr = getContentResolver();

    String[] mProjection =
            {
                    "_id",
                    CalendarContract.Events.TITLE,
                    CalendarContract.Events.EVENT_LOCATION,
                    CalendarContract.Events.DTSTART,
                    CalendarContract.Events.DTEND,
            };

    Uri uri = CalendarContract.Events.CONTENT_URI;

    cur = cr.query(uri, mProjection, null, null, null);

    while (cur.moveToNext()) {

        String title = cur.getString(cur.getColumnIndex(CalendarContract.Events.TITLE));
        String loc = cur.getString(cur.getColumnIndex(CalendarContract.Events.EVENT_LOCATION));
        if(loc.length()>0)
            Log.e("event",title+" "+loc);
    }

}