必须权限

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

Calendar Event Url

	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";
}
}

获取用户

		// Get User Name
Cursor userCursor = getContentResolver().query(Uri.parse(calanderURL), null, null, null, null);
if (userCursor.getCount() > 0) {
while (userCursor.moveToNext()) {
userCursor.getColumnNames();// [allowedAvailability, cal_sync9,
// cal_sync8, ownerAccount,
// cal_sync7, visible, cal_sync6,
// canOrganizerRespond, cal_sync5,
// cal_sync4, cal_sync3, cal_sync2,
// canModifyTimeZone, cal_sync1,
// calendar_color_index, _id,
// calendar_timezone, _sync_id,
// allowedReminders, cal_sync10,
// name, sync_events,
// calendar_access_level, dirty,
// allowedAttendeeTypes,
// canPartiallyUpdate, account_type,
// COALESCE(isPrimary, ownerAccount
// = account_name), maxReminders,
// deleted, calendar_color,
// account_name, calendar_location,
// calendar_displayName, mutators]
String userName = userCursor.getString(userCursor.getColumnIndex("name"));
String calId = userCursor.getString(userCursor.getColumnIndex("_id"));
Toast.makeText(CalendarActivity.this,calId+" " +userName, Toast.LENGTH_LONG).show();
}
}

读取Calendar Event

//Get Calander Event
Cursor eventCursor = getContentResolver().query(Uri.parse(calanderEventURL), null, null, null, null);
if (eventCursor.getCount() > 0) {
while (eventCursor.moveToNext()) {
for (int i = 0; i < eventCursor.getColumnCount(); i++) {
eventCursor.getColumnNames();// [eventEndTimezone,
// isOrganizer, cal_sync9,
// cal_sync8, cal_sync7,
// visible, cal_sync6,
// cal_sync5, rrule,
// cal_sync4, cal_sync3,
// cal_sync2, cal_sync1,
// calendar_color_index,
// hasAlarm, rdate, dtstart,
// sync_data1, sync_data2,
// hasAttendeeData,
// sync_data3,
// calendar_timezone,
// sync_data4, description,
// sync_data5, sync_data6,
// calendar_access_level,
// lunarRrule, sync_data7,
// sync_data8, sync_data9,
// customAppPackage,
// modifyTime, account_type,
// hasExtendedProperties,
// eventLocation, dtend,
// allDay, sync_data10,
// organizer, lastSynced,
// deleted, account_name,
// originalInstanceTime,
// mutators,
// selfAttendeeStatus,
// eventColor_index,
// eventTimezone,
// createTime,
// allowedAvailability,
// ownerAccount,
// canOrganizerRespond,
// canModifyTimeZone,
// lastDate,
// guestsCanModify,
// guestsCanSeeGuests,
// exrule, title, _id,
// displayColor, _sync_id,
// allowedReminders,
// uid2445, cal_sync10,
// dirty,
// allowedAttendeeTypes,
// availability,
// calendar_id, original_id,
// customAppUri,
// originalAllDay,
// maxReminders, isLunar,
// accessLevel,
// calendar_color, duration,
// calendar_displayName,
// guestsCanInviteOthers,
// original_sync_id,
// eventColor, exdate,
// eventStatus]
String eventTitle = eventCursor.getString(eventCursor.getColumnIndex("title"));
// Toast.makeText(CalendarActivity.this, eventTitle, Toast.LENGTH_LONG).show();
}
}
}

插入 Calendar Event

		//insert Calander Event

		// 获取要出入的gmail账户的id
String calId = "";
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", "奥巴马是美国第一位非洲裔总统,他的父亲老巴拉克·奥巴马是肯尼亚的经济学家。在奥巴马21岁的时候,老奥巴马不幸遭遇车祸去世,死后葬在故乡科盖洛(Kogelo)。奥巴马曾访问过这里,并在自己的回忆录《来自我父亲的梦想》里提及此事。在他入主白宫前,当地的小学还被命名为“参议员巴拉克·奥巴马小学”。奥巴马小学目前破旧不堪,孩子们还在用破桌烂凳上课。在接受媒体采访时,该小学的一位教师说:“我们认为,美国政府至少要带一些援助过来。”");
// 插入hoohbood@gmail.com这个账户
event.put("calendar_id", calId); Calendar mCalendar = Calendar.getInstance();
mCalendar.add(Calendar.DATE, 1);
long start = mCalendar.getTime().getTime();
mCalendar.add(Calendar.HOUR_OF_DAY, 2);
long end = mCalendar.getTime().getTime(); event.put("dtstart", start);
event.put("dtend", end);
event.put("hasAlarm", 1);
event.put("eventTimezone", TimeZone.getDefault().getID()); 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(CalendarActivity.this, "插入事件成功!!!", Toast.LENGTH_LONG).show();

  

  

  

  

  

Android Calander Event的更多相关文章

  1. 图解Android - Android GUI 系统 (5) - Android的Event Input System

    Android的用户输入处理 Android的用户输入系统获取用户按键(或模拟按键)输入,分发给特定的模块(Framework或应用程序)进行处理,它涉及到以下一些模块: Input Reader: ...

  2. Android 解读Event和Main Log

    1 Android P EventLogTags文件 Android P 9.0.0 所有EventLogTags文件List: system/bt/EventLogTags.logtags syst ...

  3. Android hacking event 2017

    1.you can't find me, 老规矩先打开jeb,然后看下主活动, 发现又调用了mainthread类的startWrites方法,继续跟进去. 发现是新建了一个随机输入流的文件对象,然后 ...

  4. Android中Input型输入设备驱动原理分析(一)

    转自:http://blog.csdn.net/eilianlau/article/details/6969361 话说Android中Event输入设备驱动原理分析还不如说Linux输入子系统呢,反 ...

  5. Android学习系列(43)--使用事件总线框架EventBus和Otto

    事件总线框架 针对事件提供统一订阅,发布以达到组件间通信的解决方案. 原理 观察者模式. EventBus和Otto 先看EventBus的官方定义: Android optimized event ...

  6. Android RecyclerView单击、长按事件标准实现:基于OnItemTouchListener + GestureDetector

     Android RecyclerView单击.长按事件:基于OnItemTouchListener + GestureDetector标准实现 Android RecyclerView虽然拥有L ...

  7. Android中Input型输入设备驱动原理分析<一>

    话说Android中Event输入设备驱动原理分析还不如说Linux输入子系统呢,反正这个是没变的,在android的底层开发中对于Linux的基本驱动程序设计还是没变的,当然Android底层机制也 ...

  8. Android系统--输入系统(十二)Dispatch线程_总体框架

    Android系统--输入系统(十二)Dispatch线程_总体框架 1. Dispatch线程框架 我们知道Dispatch线程是分发之意,那么便可以引入两个问题:1. 发什么;2. 发给谁.这两个 ...

  9. 【原创翻译】ArcGis Android 10.2.4更新内容简介

    翻译不当和错误之处敬请指出 更新内容官方描述 https://developers.arcgis.com/android/guide/release-notes-10-2-4.htm 10.2.4的版 ...

随机推荐

  1. 【Binary Tree Level Order Traversal II 】cpp

    题目: Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from ...

  2. Netsharp快速入门(之18) 平台常用功能(工作区相关)

    作者:秋时  转载须说明出处 第6章     平台功能 6.1     部件二次开发设置 6.1.1  工具栏管理 1.从单据二次开发-工具栏管理进入 2.主要设置显示,对应的方法名或设置权限相关操作 ...

  3. 【长期兼职】每天3小时写作=每月4000元外快(IT兼职写手)

    只要你有经验,每周平均有20来个小时的兼职时间. 只要你愿意静静地写一些心得总结. 那么就可以联系我QQ164349714,敲门:写作. 地址不限.特长不限.学历不限.年龄不限. 主要写作方向:1.投 ...

  4. UVALive - 6572 Shopping Malls floyd

    题目链接: http://acm.hust.edu.cn/vjudge/problem/48416 Shopping Malls Time Limit: 3000MS 问题描述 We want to ...

  5. 通过Log4j的DEBUG级别来显示mybatis的sql语句

        为了更加方便调试sql语句,需要显示mybatis的sql语句.     网络上的一般方式都是通过log4j来实现,但是很多都有问题.      经过实验,以下代码能够保持正常:(只显示myb ...

  6. 监听HTML input输入框值的即时变化onpropertychange、oninput兼容IE,Chrome,FF,Opera等

    转自:http://blog.csdn.net/itchiang/article/details/7769337 要达到的效果 很多情况下我们都会即时监听输入框值的变化,以便作出即时动作去引导浏览者增 ...

  7. Java对象初始化详解

    在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的.本文试图对Java如何执行对象的初始化做一个详细深入地介绍(与对象初始化相同,类在被加载之后也是需要初始化的,本 ...

  8. C# 模拟一个处理消息队列的线程类 Message Queue

    // 模拟一个处理消息队列的类 class MessageHandler { // 消息队列 private Queue<string> messageQue = new Queue< ...

  9. Sqli-labs less 40

    Less-40 本关的sql语句为SELECT * FROM users WHERE id=('$id') LIMIT 0,1 我们根据sql语句构造以下的payload: http://127.0. ...

  10. Nginx搭建flv视频点播服务器

    Nginx搭建flv视频点播服务器 前一段时间使用Nginx搭建的多媒体服务器只能在缓冲过的时间区域内拖放, 而不能拖放到未缓冲的地方. 这就带来了一个问题: 如果视频限速的速率很小, 那么客户端观看 ...