我正在开发一款能够将所有用户活动和日历带到应用的应用。 但我希望区分用户创建的全天活动,以及自动添加到日历中的活动,如生日或假日。
我得到了所有不同的日历:
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");
此外,有人可以指导我查看可用的谷歌日历和活动字段列表吗? 出于某种原因,我无法在任何地方找到它们......
由于
答案 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);
}
}