(二十三)Android中的日历读写操作!!!
最后更新于:2022-04-01 19:46:27
大家好,好久没有更新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工程,查看效果:
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-10_57aaf0eb4d6f9.gif)
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-10_57aaf0eb673b3.gif)
运行首界面获取登录账户名
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-10_57aaf0eb7f0b3.gif)
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-10_57aaf0eba27eb.gif)
获取事件title 插入一个事件
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-10_57aaf0ebc09e6.gif)
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-08-10_57aaf0ebda803.gif)
查看日历多了一条事件 查看事件详情
Ok今天就讲到这里,呵呵~
源代码下载地址:[http://download.csdn.net/source/3004309](http://download.csdn.net/source/3004309)
';