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的版 ...
随机推荐
- appium 启动失败解决方案
本机下载了:AppiumForWindows,启动Appium.exe 的时候,立即提示:应用程序已停止运行!! 本机环境: WIN 7 64 位,后来查了资料才知道Appium 要求安装.net f ...
- Cannot install ubuntu or other linux flavours on citrix Xen server
Citrix Xen sucks! When u try to install linux stuff on its Xen servers, u will get an error complain ...
- Java多jdk安装
1.安装jdk 2.配置 1.安装(略) 2.配置 2.1 regedit 注册表修改,假定已经安装jdk1.6,现在更换为jdk1.7 注: 修改红色框中CurrentVersion为jdk1.7 ...
- 【BZOJ】【3991】【SDOI2015】寻宝游戏
dfs序 我哭啊……这题在考试的时候(我不是山东的,CH大法吼)没想出来……只写了50分的暴力QAQ 而且苦逼的写的比正解还长……我骗点分容易吗QAQ 骗分做法: 1.$n,m\leq 1000$: ...
- ToolStripButton样式
public static class Extensions { public static void SetMouseDownStyle(this ToolStripButton button) { ...
- Leetcode#174 Dungeon Game
原题地址 典型的地图寻路问题 如何计算当前位置最少需要多少体力呢?无非就是在向下走或向右走两个方案里做出选择罢了. 如果向下走,看看当前位置能提供多少体力(如果是恶魔就是负数,如果是草药就是正数),如 ...
- MongoDB 基础
1. 安装 mongodb-win32-x86_64-2008plus-2.6.12-signed.msi,下载地址 https://www.mongodb.com/download-center#c ...
- samba 常见问题
今天帮一个朋友搭建samba服务器,发现总是无法正常访问,最后google+摸索搞定了,下面把遇到的问题和解决方法共享一下. 这里用的linux是centos版本6. 一开始遇到的问题是‘找不到网络路 ...
- STMPClient 发送邮件显示 不允许使用邮件名称.
在.net 2.0,3.5, 针对某些邮箱(还不清楚是什么样的邮件) , 使用微软自带的DLL发送邮件会提示不允许使用邮件名称 .... 使用Jmail可以发送. 解决方案: 1. ...
- 关于面向对象--oop
这两天在做大数据方面的项目看到关于job作业调度的设计,扣了两天了,感触良多,记下来做个反省. 这是一个精简版的图,其中还有一些没有划到,其实到这里目前对我来说已经足够了. 看完图之后进行分析,我只抛 ...