参考文档:developer.android.com/guide/topic…
日历提供程序是用户日历事件的存储区。您可以使用 Calendar Provider API,对日历、事件、参加者、提醒等执行查询、插入、更新和删除操作。
正常情况下,如要读取或写入日历数据,则应用的清单文件必须包含用户权限中所述的适当权限。为简化常见操作的执行,日历提供程序提供了一组 Intent(如日历 Intent 中所述)。这些 Intent 会将用户带入日历应用,以便执行插入事件、查看事件和编辑事件。
用户权限: 如要读取日历数据,应用必须在其清单文件中加入 READ_CALENDAR 权限。清单文件中必须包含用于删除、插入或更新日历数据的 WRITE_CALENDAR 权限:
第一 获取当前的日程事件
private static String CALENDER_EVENT_URL = "content://com.android.calendar/events";
private void checkPermission() { // 获取权限
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_CALENDAR)
!= PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_CALENDAR)
!= PackageManager.PERMISSION_GRANTED) {
Log.i(TAG,"没有权限进行申请");
ActivityCompat.requestPermissions(this, new String[]
{Manifest.permission.READ_CALENDAR,Manifest.permission.WRITE_CALENDAR},100);
} else {
Log.i(TAG,"已经有权限");
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if(requestCode == 100){
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Log.i(TAG,"用户同意权限申请");
} else {
Log.i(TAG,"用户不同意权限申请");
}
}
}
// 获取CalendarEvent事件的数据
private void getCalendarEvent() {
String startTime = "";
String endTime = "";
String eventTitle = "";
String description = "";
String location = "";
long startEventTime ;
long currentTime ;
long endEventTime;
int reminderTime;
List<Long> listTime;
listTime = new ArrayList<Long>();
Map map = new HashMap(); //创建Map 集合
Cursor eventCursor = getContentResolver().query(Uri.parse(CALENDER_EVENT_URL), null, null, null, null);
while (eventCursor.moveToNext()) {
Log.i(TAG,"·········································· " );
eventTitle = eventCursor.getString(eventCursor.getColumnIndex("title")); //获取日历事件 的标题
description = eventCursor.getString(eventCursor.getColumnIndex("description")); //获取日历事件 的描述
location = eventCursor.getString(eventCursor.getColumnIndex("eventLocation")); //获取日历事件 的地点
long eventId = eventCursor.getLong(eventCursor.getColumnIndex(CalendarContract.Calendars._ID));
Log.i(TAG,"eventId:"+eventId );
startEventTime = Long.parseLong(eventCursor.getString(eventCursor.getColumnIndex("dtstart"))); //获取 日程 开始的时间
Log.i(TAG,"startEventTime: " + startEventTime);
currentTime = Calendar.getInstance().getTimeInMillis(); //获取当前时间
Log.i(TAG,"currentTime: " + currentTime);
if (startEventTime > currentTime) { //当日历设定时间大于当前时间
listTime.add(startEventTime);
map.put(startEventTime,description);//存储键值
}
endEventTime = Long.parseLong(eventCursor.getString(eventCursor.getColumnIndex("dtend")));
Log.i(TAG,"endEventTime: " + endEventTime);
startTime = timeStamp2Date(startEventTime);
endTime = timeStamp2Date(Long.parseLong(eventCursor.getString(eventCursor.getColumnIndex("dtend")))); //获取日程结束的时间
Log.i(TAG,"eventTitle: " + eventTitle + "\n" +
"description: " + description + "\n" +
"location: " + location + "\n" +
"startTime: " + startTime + "\n" +
"endTime: " + endTime + "\n"
);
}
Collections.sort(listTime); //将list 从小到大排序 根据时间大小 获取最近事件
if(map.size() > 0) {
Object value = map.get(listTime.get(0)); //获取键所对应的值
Log.i(TAG,"获取最近一次事件:" + value);
}
}
// 该事件所涉及到的字段如下表所示: