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