介绍安卓中对日历事件的增删查改

来源:互联网 发布:数据透视表高级教程 编辑:程序博客网 时间:2024/06/17 12:35

                  介绍安卓中对日历事件的增删查改

   前几个月在做项目时有需求要将自己APK的应用同步到手机系统日历中,于是当时就查看了一些文章对手机系统日历的操作有些研究,虽然网上对日历操作的文章很多,但是自己写下来也是对自己曾经学过的东西的一种肯定,也可以让自己在以后忘了这些知识的时候再回头翻翻。

   首先你要获得对安卓系统日历事件操作的权限,也就是在AndroidManifest.xml文件中加入如下两行

·  <uses-permission android:name="android.permission.READ_CALENDAR"/>   

·  <uses-permission android:name="android.permission.WRITE_CALENDAR"/> 

   安卓中日历用到三个URL,分别是日历用户的URL,事件的URL,以及事件提醒的URL,三个URL在安卓版本2.2前后分别是:

    

   if(Integer.parseInt(Build.VERSION.SDK)>=8){

      uri = "content://com.android.calendar/calendars";

     eventUri = "content://com.android.calendar/events";

      reminderUri = "content://com.android.calendar/reminders";

}

else{

  uri = "content://calendar/calendars";

  eventUri = "content://calendar/events"

  reminderUri = "content://calendar/reminders";

}

接下来就将演示 如何在系统的日历中插入,修改,查询,和删除一条日历的操作了。

插入日历:

因为现在一个手机里可能会有很多的日历,这就要先查询出,你要对你手机里的哪个日历做添加日历的事件;

查询手机日历:

Uri calendars = Uri.parse(uri);

Cursor managedCursor = getContentResolver().query(calendars,projection, nullnullnull);//查询出你手机里所有的日历

String calId = null;//你要添加日历事件的日历ID

if (managedCursor.moveToFirst()){

    do{

int idColumn = managedCursor.getColumnIndex("_id");

         String id = managedCursor.getString(idColumn);//获取系统日历的id

 if(id.equals("3")){//假设我们要操作id3的日历,则把这个id赋值给calId 

calId=id;

break;

}

}while(managedCursor.moveToNext());

}

Calendar calendar = Calendar.getInstance();

long start = calendar.getTime().getTime();

calendar.setTime(endDate);

long end = calendar.getTime().getTime();

ContentValues event = new ContentValues();

event.put("calendar_id", calId);

event.put("title""新日历事件");

event.put("description""这是一条新日历事件 ");

event.put("dtstart", start);

event.put("dtend", end);

event.put("eventTimezone", Time.getCurrentTimezone());//这个时区一定要设置 否则应用会挂掉

event.put("hasAlarm", 1);

Uri eventcalendarUri = Uri.parse(eventUri);

Uri url = getContentResolver().insert(eventcalendarUri,event);//添加一条日历事件

long eventId = Long.parseLong(url.getLastPathSegment());//获取这条日历事件的id

//增加10分钟提醒

ContentValues values = new ContentValues();

values.put("event_id", eventId);

values.put("method", 1);

values.put("minutes", 10);

getContentResolver().insert(Uri.parse(reminderUri), values);

 

 

得到这条日历事件的id之后,就可以通过这个id对这条日历事件进行修改,查询和删除操作了

 

修改日历事件:

ContentValues updateValues = new ContentValues();

updateValues.put("description","这是对前一条日历事件的修改 ");

updateValues.put("dtstart", start);

updateValues.put("dtend", end);

Uri updateUri = ContentUris.withAppendedId(Uri.parse(eventUri), eventId);

getContentResolver().update(updateUri, updateValues, nullnull);

 

查询日历事件:

Cursor cursor = getContentResolver().query(Uri.parse(eventUri), nullnullnullnull);

if(cursor.moveToFirst()){

do{

String eventId = cursor.getString(cursor.getColumnIndex("_id"));

  

String description=cursor.getString(cursor.getColumnIndex("description"));

}

while(cursor.moveToNext());

}

删除日历事件:

ContentValues updateValues = new ContentValues();

Uri deleteUri = null;

deleteUri  = ContentUris.withAppendedId(Uri.parse(eventUri),eventId)

getContentResolver().delete(deleteUri  ,null,null);

好了,对日历的操作就到这里了,希望对有需要的人有点帮助

 

0 0