《Android高手进阶教程》23.Android中的日历读写操作

  • 来源:Android_Tutor博客
  • 作者:
  • 字体:【
  • 时间:2011-10-03
  • 点击:
  • 收藏本文

大家好,好久没有更新blog了,今天给大家分享一下Android日历读写的操作方法,这里主要用到了ContentProiver的知识。如果大家不明白ContentProvider建议先查一下资料,知道它是干什么的。这样更容易下面的例子。

好了废话不说,这里提个醒,Android中的日历只有真机才有,模拟上是没有的,所以测试环境一定要真机!!

因为日历是系统自带的,所以我们读写它一定要申请权限,也就是在AndroidManifest.xml加如下两行代码(一个读一个写):

Android中日历用了三个URL,分别是日历用户的URL,事件的URL,事件提醒URL,三个URL在Android2.1之前是如下的样子:

calanderURL = "content://calendar/calendars";
calanderEventURL = "content://calendar/events";
calanderRemiderURL= "content://calendar/reminders";

但是在Android2.2版本以后,三个URL有了改变,变成如下的样子:

calanderURL = "content://com.android.calendar/calendars";
calanderEventURL = "content://com.android.calendar/events";
calanderRemiderURL = "content://com.android.calendar/reminders";

还是老样子,为了让大家更好的理解,我写了一个简单的Demo,大家按照我的步骤一步一步的来:

第一步:新建一个Android工程命名为CalendarDemo

第二步:修改main.xml布局文件,增加了三个按钮,代码如下:

第三步:修改主核心程序CalendarDemo.java,代码如下:

package com.tutor.calendardemo;

import java.util.Calendar;

import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class CalendarDemo extends Activity implements OnClickListener {
	private Button mReadUserButton;
	private Button mReadEventButton;
	private Button mWriteEventButton;

	private static String calanderURL = "";
	private static String calanderEventURL = "";
	private static String calanderRemiderURL = "";
	// 为了兼容不同版本的日历,2.2以后url发生改变
	static {
		if (Integer.parseInt(Build.VERSION.SDK) >= 8) {
			calanderURL = "content://com.android.calendar/calendars";
			calanderEventURL = "content://com.android.calendar/events";
			calanderRemiderURL = "content://com.android.calendar/reminders";

		} else {
			calanderURL = "content://calendar/calendars";
			calanderEventURL = "content://calendar/events";
			calanderRemiderURL = "content://calendar/reminders";
		}
	}

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		setupViews();
	}

	private void setupViews() {
		mReadUserButton = (Button) findViewById(R.id.readUserButton);
		mReadEventButton = (Button) findViewById(R.id.readEventButton);
		mWriteEventButton = (Button) findViewById(R.id.writeEventButton);
		mReadUserButton.setOnClickListener(this);
		mReadEventButton.setOnClickListener(this);
		mWriteEventButton.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		if (v == mReadUserButton) {

			Cursor userCursor = getContentResolver().query(
					Uri.parse(calanderURL), null, null, null, null);
			if (userCursor.getCount() > 0) {
				userCursor.moveToFirst();
				String userName = userCursor.getString(userCursor
						.getColumnIndex("name"));
				Toast.makeText(CalendarDemo.this, userName, Toast.LENGTH_LONG)
						.show();
			}
		} else if (v == mReadEventButton) {
			Cursor eventCursor = getContentResolver().query(
					Uri.parse(calanderEventURL), null, null, null, null);
			if (eventCursor.getCount() > 0) {
				eventCursor.moveToLast();
				String eventTitle = eventCursor.getString(eventCursor
						.getColumnIndex("title"));
				Toast.makeText(CalendarDemo.this, eventTitle, Toast.LENGTH_LONG)
						.show();
			}
		} else if (v == mWriteEventButton) {
			// 获取要出入的gmail账户的id
			String calId = "";
			Cursor userCursor = getContentResolver().query(
					Uri.parse(calanderURL), null, null, null, null);
			if (userCursor.getCount() > 0) {
				userCursor.moveToFirst();
				calId = userCursor.getString(userCursor.getColumnIndex("_id"));

			}
			ContentValues event = new ContentValues();
			event.put("title", "与苍井空小姐动作交流");
			event.put("description",
					"Frankie受空姐邀请,今天晚上10点以后将在Sheraton动作交流.lol~");
			// 插入hoohbood@gmail.com这个账户
			event.put("calendar_id", calId);

			Calendar mCalendar = Calendar.getInstance();
			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("hasAlarm", 1);

			Uri newEvent = 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);
			getContentResolver().insert(Uri.parse(calanderRemiderURL), values);
			Toast.makeText(CalendarDemo.this, "插入事件成功!!!", Toast.LENGTH_LONG)
					.show();
		}
	}
}

第四步:在AndroidManifest.xml中申请权限,代码如下:

第五步:运行上述Android工程,查看效果:

1
运行首界面

2
获取登录账户名

3
获取事件title

4
插入一个事件

5
查看日历多了一条事件

6
查看事件详情

Ok今天就讲到这里,呵呵~

本节源码:CalendarDemo.rar

暂无评论
  • 1:请一针见血的评论。
  • 2:评论需要审核通过后才能显示。
  • 3:评论字数限制在1000字以内。
  • 当前字数:0
热门文章
推荐文章
  • 暂无推荐文章
随机文章
关于本站 - 广告服务 - 版权声明 - 联系我们 - 友情链接 - 网站地图 - 帮助中心