项目中,有一个功能是点击listview的每个item,然后将item的内容放到系统日历上,以便于提醒,所以需要调用系统日历的api,弹出系统日历的功能,网上资料很少,不过有一个博主已经提供了很多的api,参考如下:http://blog.csdn.net/Android_Tutor/article/details/6165470,http://www.xuebuyuan.com/1584194.html,我在代码中完善和整理了他们两个人的方式,如下主要代码:
/**
* 列表的点击事件监听,调用系统日历,并将经济数据添加到日历控件上
*
* @author qiulinhe
* @createTime 2016年6月7日 上午8:57:34
*/
private class ItemClickListener implements OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//弹出系统自带日历控件增加一个日历事件
addCalendar(position);
//弹出系统日历
jumpCalendar();
}
}
/**
* 弹出系统日历
*
* @author qiulinhe
* @createTime 2016年6月7日 上午10:45:34
*/
private void jumpCalendar() {
try {
Intent i = new Intent();
ComponentName cn = null;
if (Integer.parseInt(Build.VERSION.SDK) >= 8) {
cn = new ComponentName("com.android.calendar", "com.android.calendar.LaunchActivity");
} else {
cn = new ComponentName("com.google.android.calendar", "com.android.calendar.LaunchActivity");
}
i.setComponent(cn);
getActivity().startActivity(i);
} catch (ActivityNotFoundException e) {
}
}
/**
* 增加一个日历事件
*
* @author qiulinhe
* @param position
* @createTime 2016年6月7日 上午9:20:11
*/
public void addCalendar(int position) {
//查询将返回所有日历,包括那些平时不会用到的
String[] projection = new String[] { "_id", "name" };
Uri calendars = Uri.parse(calanderURL);
Cursor managedCursor = getActivity().getContentResolver().query(calendars, projection, null, null, null);
String calId = null;
//现在检索的日历列表,可以遍历的结果如下
if (managedCursor.moveToFirst()) {
int nameColumn = managedCursor.getColumnIndex("name");
int idColumn = managedCursor.getColumnIndex("_id");
do {
String calName = managedCursor.getString(nameColumn);
calId = managedCursor.getString(idColumn);
} while (managedCursor.moveToNext());
}
//添加一个条目到特定的日历,我们需要配置一个日历项插入使用与ContentValues如下:
ContentValues event = new ContentValues();
//事件插入日历标识符
event.put("calendar_id", calId);
//活动的标题,描述和位置领域的一些基本信息。
event.put("title", (String) mCustomBaseAdapter.getItem(position));
event.put("description", "Event Desc");
event.put("eventLocation", "Event Location");
//设置事件的开始和结束的信息如下
Calendar mCalendar = Calendar.getInstance();
//mCalendar.add(Calendar.DAY_OF_MONTH, 1);
mCalendar.set(Calendar.HOUR_OF_DAY, 10);
long start = mCalendar.getTime().getTime();
mCalendar.set(Calendar.HOUR_OF_DAY, 11);
long end = mCalendar.getTime().getTime();
event.put("dtstart", start);
event.put("dtend", end);
//设置一个全天事件的条目
//event.put("allDay", 1); // 0 for false, 1 for true
//事件状态暂定(0),确认(1)或取消(2)
event.put("eventStatus", 1);
//控制是否事件触发报警,提醒如下
event.put("hasAlarm", 1); // 0 for false, 1 for true
//设置时区,否则会报错
event.put(CalendarContract.Events.EVENT_TIMEZONE, TimeZone.getDefault().getID());
//一旦日历事件配置正确,我们已经准备好使用ContentResolver插入到相应的开放新日历的日历事件项:
Uri eventsUri = Uri.parse(calanderEventURL);
Uri newEvent = getActivity().getContentResolver().insert(eventsUri, event);
//设置什么时候提醒
//Uri newEvent = getActivity().getContentResolver().insert(Uri.parse(calanderEventURL), event);
long id = Long.parseLong(newEvent.getLastPathSegment());
ContentValues values = new ContentValues();
values.put("event_id", id);
//提前10分钟有提醒
values.put("minutes", 10);
getActivity().getContentResolver().insert(Uri.parse(calanderRemiderURL), values);
Toast.makeText(getActivity(), "插入事件成功!!!", Toast.LENGTH_LONG).show();
}