Android 弹出系统日历,添加提醒事件

    项目中,有一个功能是点击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();

	}


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值