Android高手进阶教程(二十三)之---Android中的日历读写操作!!!
大家好,好久没有更新blog了,今天给大家分享一下Android中一些自带日历的操作方法,这里主要用到了ContentProiver的知识.如果大家不明白ContentProvider建议先查一下资料,知道它是干什么的。这样更容易下面的例子.
好了废话不说,这里提个醒,Android中的日历,只有真机才有,模拟上是没有的,所以测试环境一定要真机!!
因为日历是系统自带的,所以我们读写它一定要申请权限,也就是在AndroidManifest.xml加如下两行代码(一个读一个写):
?
- <uses-permission?android:name="android.permission.READ_CALENDAR"/>???
- <uses-permission?android:name="android.permission.WRITE_CALENDAR"/>???
?
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布局文件,增加了三个按钮,代码如下:
?
- <?xml?version="1.0"?encoding="utf-8"?>??
- <LinearLayout?xmlns:android="http://schemas.android.com/apk/res/android"??
- ????android:orientation="vertical"??
- ????android:layout_width="fill_parent"??
- ????android:layout_height="fill_parent"??
- ????>??
- ???<TextView????
- ????android:layout_width="fill_parent"???
- ????????android:layout_height="wrap_content"???
- ????android:text="@string/hello"??
- ????/>??
- ???<Button??
- ????????android:id="@+id/readUserButton"??
- ????????android:layout_width="fill_parent"???
- ????android:layout_height="wrap_content"???
- ????android:text="Get?a?User"??
- ????/>?????
- ????<Button??
- ????????android:id="@+id/readEventButton"??
- ????????android:layout_width="fill_parent"???
- ????android:layout_height="wrap_content"???
- ????android:text="Get?a?Event"??
- ????/>??
- ?????<Button??
- ????????android:id="@+id/writeEventButton"??
- ????????android:layout_width="fill_parent"???
- ????android:layout_height="wrap_content"???
- ????android:text="Input?a?Event"??
- ????/>??
- </LinearLayout>??
?
第三步:修改主核心程序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?=?"";??
- ??????
- ????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){??
- ??????????????
- ????????????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~");??
- ??????????????
- ????????????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?);??
- ??????????????
- ????????????values.put(?"minutes",?10?);??
- ????????????getContentResolver().insert(Uri.parse(calanderRemiderURL),?values);??
- ????????????Toast.makeText(CalendarDemo.this,?"插入事件成功!!!",?Toast.LENGTH_LONG).show();??
- ????????}??
- ????}??
- }??
???
第四步:在AndroidManifest.xml中申请权限,代码如下:
?
- <?xml?version="1.0"?encoding="utf-8"?>??
- <manifest?xmlns:android="http://schemas.android.com/apk/res/android"??
- ??????package="com.tutor.calendardemo"??
- ??????android:versionCode="1"??
- ??????android:versionName="1.0">??
- ????<application?android:icon="@drawable/icon"?android:label="@string/app_name">??
- ????????<activity?android:name=".CalendarDemo"??
- ??????????????????android:label="@string/app_name">??
- ????????????<intent-filter>??
- ????????????????<action?android:name="android.intent.action.MAIN"?/>??
- ????????????????<category?android:name="android.intent.category.LAUNCHER"?/>??
- ????????????</intent-filter>??
- ????????</activity>??
- ????</application>??
- ????<uses-sdk?android:minSdkVersion="7"?/>??
- ????<uses-permission?android:name="android.permission.READ_CALENDAR"/>???
- ????<uses-permission?android:name="android.permission.WRITE_CALENDAR"/>???
- </manifest>???
?
第五步:运行上述Android工程,查看效果:
????????????????? 运行首界面??????????????????????????????????????????????????????获取登录账户名
?
???????????????????????? 获取事件title???????????????????????????????????????????? 插入一个事件
??
???????????????????? 查看日历多了一条事件?????????????????????????????????????? 查看事件详情
?
Ok今天就讲到这里,呵呵~
源代码下载地址:http://download.csdn.net/source/3004309
?
转自:http://blog.csdn.net/android_tutor/article/details/6165470