Android手机配备有一个内置的日历应用程序。第三方应用程序可以利用日历内容提供商接口读取用户的日历信息和安排在日历新的事件。这个日历可以直接同步用户的谷歌日历。

不幸的是,没有文档和Android手机的日历应用集成,因为有另外一个联系人应用程序。相反,本文所提供的所有信息,将会通过逆向工程的谷歌日历内容提供商。该接口是受变化的,将会支持有限的功能。然而,日历一体化可以成为一些类型的应用强大的功能。

本文的代码测试之到Android 2.0 SDK版本。我们将发布一个更新如果有一个很大的转变。我们没有测试这个装置,如早先的T - Mobile G1的(SDK的1.6)代码。

访问日历数据 
为了支持添加到您的日历的Android应用程序,您必须给你的应用程序添加以下权限AndroidManifest.xml文件:

  1. <uses-permission
  2. android:name="android.permission.READ_CALENDAR">
  3. </uses-permission>
  4. <uses-permission
  5. android:name="android.permission.WRITE_CALENDAR">
  6. </uses-permission>

注册这些权限允许您访问谷歌登录用户的日历数据,无需处理任何问题。该日历应用程序未安装在Android模拟器,因此所有的测试和开发必须在日历应用程序实际完成安装的设备(使用模拟器将无法启动相应的提供者)。日历应用程序和内容提供商可在与谷歌服务,例如T - Mobile G1。 
检索用户日历列表 
用户可能在日历应用程序配置有很多名称的日历。例如,用户可能有一个工作日历(工作日历有关的活动),家庭日历(个人的)和假日日历(法定假日)。 
由用户配置的日历使用并访问内容提供商接口。为了检索用户的日历列表,我们需要为适当Uri以及日历内容提供商设计查询,如下所示:

  1. String[] projection = new String[] { "_id", "name" };
  2. Uri calendars = Uri.parse("content://calendar/calendars");
  3. Cursor managedCursor =
  4. managedQuery(calendars, projection, null, null, null);

现在,这个查询将返回所有日历,包括那些平时不会用到的。为了得到一个活跃的日历列表单,我们需要在“选择”设置为true的领域在内限制我们的查询

  1. String[] projection = new String[] { "_id", "name" };
  2. Uri calendars = Uri.parse("content://calendar/calendars");
  3. Cursor managedCursor =
  4. managedQuery(calendars, projection, "selected=1", null, null);

我们现在检索的日历列表。我们可以遍历的结果如下:

  1. if (managedCursor.moveToFirst()) {
  2. String calName;
  3. String calId;
  4. int nameColumn = managedCursor.getColumnIndex("name");
  5. int idColumn = managedCursor.getColumnIndex("_id");
  6. do {
  7. calName = managedCursor.getString(nameColumn);
  8. calId = managedCursor.getString(idColumn);
  9. } while (managedCursor.moveToNext());
  10. }

一旦我们知道我们想要访问的日历,我们可以添加一个日历事件。日历事件有一些重要领域,其中包括如活动名称,时间和地点以及设置的信息,哪一项将被显示在日历。日历事件可能是一次性或经常性的。

给日历增加单一事件发生的情况

添加一个条目到特定的日历,我们需要配置一个日历项插入使用与ContentValues如下:

  1. ContentValues event = new ContentValues();

每个活动必须与特定日历结合,所以,首先你会想到的是为此事件插入日历标识符。

  1. event.put("calendar_id", calId);

然后,我们设置了有关事件,其中包括活动的标题,描述和位置弦乐领域的一些基本信息。

  1. event.put("title", "Event Title");
  2. event.put("description", "Event Desc");
  3. event.put("eventLocation", "Event Location");

有许多不同的配置选项来设置事件的时间和日期。

我们可以设置事件的开始和结束的信息如下:

  1. long startTime = START_TIME_MS;
  2. long endTime = END_TIME_MS;
  3. event.put("dtstart", startTime);
  4. event.put("dtend", endTime);

如果我们增加了生日或假日,我们会设置一个全天事件的条目:

  1. event.put("allDay", 1); // 0 for false, 1 for true

这一信息对于大多数项足够了。但是,有一些其他有用的日历项属性。

例如,您可以设置事件状态暂定(0),确认(1)或取消(2):

  1. event.put("eventStatus", 1);

您可以控制可以看到它的可见性设置为默认值(0此事件),保密(1),私营(2),或公共(3):

  1. event.put("visibility", 0);

您可以控制日历上事件是否消耗时间,通过设置其透明度,不透明(0)或透明(1)。

  1. event.put("transparency", 0);

您可以控制是否事件触发报警,提醒如下:

  1. event.put("hasAlarm", 1); // 0 for false, 1 for true

一旦日历事件配置正确,我们已经准备好使用ContentResolver插入到相应的开放新日历的日历事件项:

  1. Uri eventsUri = Uri.parse("content://calendar/events");
  2. Uri url = getContentResolver().insert(eventsUri, event);

该调用insert()方法接触的日历内容提供商,并试图插入到相应的用户的日历项。如果您导航到日历应用程序和启动它,你应该看到您在适当的日历中的日历项。自日历同步,你也看到日历项在线,如果你在网络上使用的谷歌日历。

添加一个定期事件的日历

您也可以设定定期日历事件。为了做到这一点,你必须根据当前的规则添加更多的字段。规则是根据RFC2445。

结论

Android应用程序可以集成与用户的日历密切的许多Android设备。该日历功能是通过一条内容提供商的接口,允许第三方应用程序访问日历信息,并添加新日历项。

调用Android自带日历功能的更多相关文章

  1. 调用Android自带日历功能(日历列表单、添加一个日历事件)

    调用Android自带日历功能  觉得这篇文章不错,转载过来. 转载:http://blog.csdn.net/djy1992/article/details/9948393 Android手机配备有 ...

  2. 调用Android自带浏览器打开网页

    转载请注明出处: http://blog.csdn.net/lowprofile_coding/article/details/77928608 在Android中可以调用自带的浏览器,或者指定一个浏 ...

  3. delphi调用windows自带语音功能

    windows自带语音接口 SAPI.SpVoice, 接口说明如下 https://docs.microsoft.com/en-us/previous-versions/windows/deskto ...

  4. 实现调用Android手机的拍照功能

    很简单,直接上示例吧 1 xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android&q ...

  5. Android 向系统日历中添加事件

    查了一天半,总算有点大概了.以下是自己的理解,有错误的地方望指正. android系统有日历功能,应用程序可以根据一些接口开发自己的功能,即使是日历app也是根据这些接口开发的,所以我们可以利用程序向 ...

  6. (转载) Android 带清除功能的输入框控件ClearEditText,仿IOS的输入框

    Android 带清除功能的输入框控件ClearEditText,仿IOS的输入框 标签: Android清除功能EditText仿IOS的输入框 2013-09-04 17:33 70865人阅读  ...

  7. (转)Android调用系统自带的文件管理器进行文件选择并获得路径

    Android区别于iOS的沙盒模式,可以通过文件浏览器浏览本地的存储器.Android API也提供了相应的接口. 基本思路,先通过Android API调用系统自带的文件浏览器选取文件获得URI, ...

  8. Android调用系统关机与重启功能

    我是在android源码里编译的package/apps/,因为需要调用的关机接口是不对上层开放的,在eclipse里面不能调用. 我主要是介绍调用android的关机功能,因为在调试过程中,关机的一 ...

  9. Delphi xe7 up1 调用android振动功能

    Delphi xe7 up1 调用android振动功能 振动用到以下4个单元: Androidapi.JNI.App,Androidapi.JNIBridge,Androidapi.JNI.Os,A ...

随机推荐

  1. CentOS 6.9设置阿里云源/163源

    阿里云: 1.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2.下载新的CentOS ...

  2. WebService如何抛出干净的异常

    转载:http://www.cnblogs.com/ahdung/p/3953431.html 说明:[干净]指的是客户端在捕获WebService(下称WS)抛出的异常时,得到的ex.Message ...

  3. Python 列表(Lists)

    Python 列表(Lists) 序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推. Python有6个序列的内置类 ...

  4. Eclipse NDK 配置,不用安装Cygwin

    一.关于NDK:NDK全称:Native Development Kit.1.NDK是一系列工具的集合.NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用 ...

  5. python笔记16-执行cmd指令(os.system和os.popen)

    os.system 1.如果想在cmd执行python脚本,可以直接用如下指令 python [xx.py绝对路径] 比如我写了个hello.py的脚本,在脚本里面写入内容:print("h ...

  6. Appium+python自动化22-Appium Desktop

    Appium Desktop 原滋原味的官方文档 Appium Desktop是一款用于Mac.Windows和Linux的开源应用,它提供了Appium自动化服务器在一个漂亮灵活的UI中的强大功能. ...

  7. 图解TCP

  8. ASP.NET 5 Beta5来了(翻译)

    在6月30日微软发布了ASP.NET 5 Beta5,我们可以从http://nuget.org上获取Beta5 的packages. 随着VS2015RC发布的ASP.NET 5的版本号是Beta4 ...

  9. 数学图形(1.41)super spiral超级螺线

    一种很酷的螺线,看着有种分形学的感觉.参考自http://www.2dcurves.com/spiral/spirallos.html 其数学的极坐标表达式如下: 我的脚本代码如下: #http:// ...

  10. php 单进程SAPI生命周期

    php的生命周期3.1 STARTUP    1.初始化引擎和核心组件.    2.解析php.ini.    3.初始化静态构建的模块(MINIT).    4.初始化共享模块(MINIT).3.2 ...