Android Calander Event
必须权限
<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的更多相关文章
- 图解Android - Android GUI 系统 (5) - Android的Event Input System
Android的用户输入处理 Android的用户输入系统获取用户按键(或模拟按键)输入,分发给特定的模块(Framework或应用程序)进行处理,它涉及到以下一些模块: Input Reader: ...
- Android 解读Event和Main Log
1 Android P EventLogTags文件 Android P 9.0.0 所有EventLogTags文件List: system/bt/EventLogTags.logtags syst ...
- Android hacking event 2017
1.you can't find me, 老规矩先打开jeb,然后看下主活动, 发现又调用了mainthread类的startWrites方法,继续跟进去. 发现是新建了一个随机输入流的文件对象,然后 ...
- Android中Input型输入设备驱动原理分析(一)
转自:http://blog.csdn.net/eilianlau/article/details/6969361 话说Android中Event输入设备驱动原理分析还不如说Linux输入子系统呢,反 ...
- Android学习系列(43)--使用事件总线框架EventBus和Otto
事件总线框架 针对事件提供统一订阅,发布以达到组件间通信的解决方案. 原理 观察者模式. EventBus和Otto 先看EventBus的官方定义: Android optimized event ...
- Android RecyclerView单击、长按事件标准实现:基于OnItemTouchListener + GestureDetector
Android RecyclerView单击.长按事件:基于OnItemTouchListener + GestureDetector标准实现 Android RecyclerView虽然拥有L ...
- Android中Input型输入设备驱动原理分析<一>
话说Android中Event输入设备驱动原理分析还不如说Linux输入子系统呢,反正这个是没变的,在android的底层开发中对于Linux的基本驱动程序设计还是没变的,当然Android底层机制也 ...
- Android系统--输入系统(十二)Dispatch线程_总体框架
Android系统--输入系统(十二)Dispatch线程_总体框架 1. Dispatch线程框架 我们知道Dispatch线程是分发之意,那么便可以引入两个问题:1. 发什么;2. 发给谁.这两个 ...
- 【原创翻译】ArcGis Android 10.2.4更新内容简介
翻译不当和错误之处敬请指出 更新内容官方描述 https://developers.arcgis.com/android/guide/release-notes-10-2-4.htm 10.2.4的版 ...
随机推荐
- Entity Framework走马观花之把握全局
在深入学习某项技术之前,应该努力形成对此技术的总体印象,并了解其基本原理,本文的目的就在于此. 一.理解EF数据模型 EF本质上是一个ORM框架,它需要把对象映射到底层数据库中的表,为此,它使用了三个 ...
- 2. ProGit-Git基础
(1) 取得项目的Git仓库 从工作目录中初始化新仓库 git init 从现有仓库克隆 git clone ssh协议 http协议 (2) 检查当前文件状态 git status (3) ...
- Google Guava学习笔记——简介
Google Guava是什么东西?首先要追溯到2007年的“Google Collections Library”项目,它提供对Java 集合操作的工具类.后来Guava被进化为Java程序员开发必 ...
- 通过Log4j的DEBUG级别来显示mybatis的sql语句
为了更加方便调试sql语句,需要显示mybatis的sql语句. 网络上的一般方式都是通过log4j来实现,但是很多都有问题. 经过实验,以下代码能够保持正常:(只显示myb ...
- 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
// test20.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...
- 迭代启发式搜索 IDA*
本章聚集了一些做了的迭代启发式搜索的题目 为什么只打了迭代启发式搜索? 因为它很好打,有些类似迭代的时候加的最优化剪枝 [因为这个最优化剪枝其实就是你算的估价函数了...] BZOJ 1085 骑士精 ...
- Segment Tree 扫描线 分类: ACM TYPE 2014-08-29 13:08 89人阅读 评论(0) 收藏
#include<iostream> #include<cstdio> #include<algorithm> #define Max 1005 using nam ...
- javascript高级函数
高级函数 安全的类型检测 js内置的类型检测并非完全可靠,typeof操作符难以判断某个值是否为函数 instanceof在多个frame的情况下,会出现问题. 例如:var isArray = va ...
- CHtml::radioButtonList
public function getSortList(){ $arr = array(); $arr[0]['id']=0; $arr[0]['name']="否"; $arr[ ...
- ExtJS与jQuery的一点细节上的对比
首先说明这不是一篇完整解读ExtJS和jQuery所有方面差异的文章,只是针对我个人刚看了两天的jQuery产生的一些疑问的整理.之前用过一段时间ExtJS,了解ExtJS的一些机制.现在做移动开发, ...