`
kldwq2002
  • 浏览: 9217 次
文章分类
社区版块
存档分类
最新评论

Working with the Android Calendar

阅读更多

Working with the Android Calendar

Introduction

Android handsets ship with a built-in Calendar application. Third-party applications can leverage the Calendar content provider interface to read user's calendar information and schedule new events in the Calendar. This Calendar directly synchronizes with the user's Google calendar.

Disclaimer

Unfortunately, there is no documentation for integrating with the Calendar application on Android as there is with other applications like the Contacts application. Instead, all information provided in this article was determined via reverse-engineering the Google Calendar content provider. This interface is subject to change and limited features are supported. However, Calendar integration can be a powerful feature for certain types of applications.

The code for this article was tested prior to the Android 2.0 SDK release. Since there are currently no Android 2.0 phones on the market, we cannot yet verify that this code works on the latest devices about to ship. We will post an update if there is a significant change. We did test this code on earlier devices like the T-Mobile G1 (SDK 1.6).

Accessing Calendar Data

In order to add Calendar support to your Android application, you must add the following permissions to your application's AndroidManifest.xml file:


 

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

 

Registering these permissions allow you to access the user's calendar data without having to deal with any Google login issues. The Calendar application is not installed on the Android emulator so all testing and development must be done with an actual device with the Calendar application installed (using the emulator will fail to launch the appropriate provider). The Calendar application and content provider are available on Android handsets with Google services, such as the T-Mobile G1.

 


 

Retrieving a List of the User's Calendars

A user may have any number of named calendars configured within the Calendar application. For example, a user might have a work calendar (for work-related activities), a home calendar (for personal activities), and a holiday calendar (for holidays observed).

The calendars configured by the user are accessed using the content provider interface. In order to retrieve a list of the user's calendars, we need to craft a query for the appropriate Uri for the Calendar content provider, as follows:

 

String[] projection = new String[] { "_id", "name" };
Uri calendars = Uri.parse("content://calendar/calendars");

Cursor managedCursor =
managedQuery(calendars, projection, null, null, null);

 

Now, this query will return all calendars, including those that are not in active use. In order to get a list of active calendars only, we need to limit our query to only those with the "selected" field set to true:

 

String[] projection = new String[] { "_id", "name" };
Uri calendars = Uri.parse("content://calendar/calendars");

Cursor managedCursor =
managedQuery(calendars, projection,
"selected=1", null, null);

 

We have now retrieved a list of calendars. We could iterate through the results as follows:

 

if (managedCursor.moveToFirst()) {
String calName;
String calId;
int nameColumn = managedCursor.getColumnIndex("name");
int idColumn = managedCursor.getColumnIndex("_id");
do {
calName = managedCursor.getString(nameColumn);
calId = managedCursor.getString(idColumn);
} while (managedCursor.moveToNext());
}

 

Once we know which calendar we want to access, we can add a calendar event. Calendar events have a number of important fields, including information such as the event title, time and location as well as settings for how the entry will be displayed in the calendar. The calendar events may be one- time or recurring.

Adding a Single-Occurrence Event to a Calendar

To add an entry to a specific calendar, we need to configure a calendar entry to insert using theContentValues as follows:

 

ContentValues event = new ContentValues();

 

Each event needs to be tied to a specific Calendar, so the first thing you're going to want to set is the identifier of the Calendar to insert this event into:

 

event.put("calendar_id", calId);

 

We then set some of the basic information about the event, including String fields such as the event title, description and location.

 

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

 

There are a number of different options for configuring the time and date of an event.

We can set the event start and end information as follows:

 

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

 

If we are adding a birthday or holiday, we would set the entry to be an all day event:

 

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

 

This information is sufficient for most entries. However, there are a number of other useful calendar entry attributes.

For example, you can set the event status to tentative (0), confirmed (1) or canceled (2):

 

event.put("eventStatus", 1);

 

You can control who can see this event by setting its visibility to default (0), confidential (1), private (2), or public (3):

 

event.put("visibility", 0);

 

You can control whether an event consumes time (can have schedule conflicts) on the calendar by setting its transparency to opaque (0) or transparent (1).

 

event.put("transparency", 0);

 

You can control whether an event triggers a reminder alarm as follows:

 

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

 

Once the calendar event is configured correctly, we're ready to use the ContentResolver to insert the new calendar entry into the appropriate Uri for calendar events:

 

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

 

The call to the insert() method contacts the Calendar content provider and attempts to insert the entry into the appropriate user Calendar. If you navigate to the Calendar application and launch it, you should see your calendar entry in the appropriate Calendar. Since the Calendar syncs, you will also see the Calendar entry online, if you're using the Google Calendar on the web.

Adding a Recurring Event to a Calendar

You can also configure recurring Calendar events. In order to do so, you must add several more fields to the event in the form of a recurrence rule. The rule specification is based upon RFC2445.

Conclusion

Android applications can integrate closely with the user's calendar available with many Android devices. The calendar functionality is accessed via a content provider interface, allowing third-party applications to access calendar information and add new calendar entries.

About the Authors

Shane Conder is a software developer focused on mobile and web technologies. He is currently working at a small mobile software company. With almost two decades of experience in software production, Lauren Darcey specializes in the development of commercial grade mobile applications. Recently, Shane and Lauren coauthored an in-depth programming book entitled Android Wireless Application Development (ISBN: 0321627091), available from Addison-Wesley . They are now working on an entry-level Android book, coming in Spring 2010. They can be reached at androidwirelessdev+a6@gmail.comand via their blog at http://androidbook .blogspot.com


 

分享到:
评论

相关推荐

    Retrofit Love Working with APIs on Android

    这个主题“Retrofit Love Working with APIs on Android”深入探讨了如何利用Retrofit来构建强大的网络功能。 Retrofit是由Square公司开发的一个类型安全的HTTP客户端,它允许开发者通过简单的接口定义来创建网络...

    Working with XML on Android

    在Android平台上处理XML是构建移动应用不可或缺的一部分,尤其当应用需要利用互联网资源时。本文将介绍在Android应用中使用XML的不同方法,包括解析和构建XML文档的基本技能。 首先,我们需要了解Android应用是使用...

    Retrofit.Love.Working.with.APIs.on.Android

    Learn how to create effective REST clients on Android with Retrofit. Boost your productivity and enjoy working with complex APIs. Table of Contents Chapter 1 — Getting Started Chapter 2 — Requests ...

    Working with Linux Quick Hacks for the Command Line epub

    Working with Linux Quick Hacks for the Command Line 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Android代码-WeekCalendar

    I AM NOT WORKING ON THIS LIBRARY ANYMORE. I AM NOT VERY PROUD OF THEY WAY I WROTE THIS WIDGET :grin:. I WOULD RECOMMEND TO USE CALENDAR AS A CUSTOM VIEW INSTEAD OF ADDING IT AS GRADLE DEPENDENCY. ...

    Working With Android Contacts

    在Android平台上,与联系人数据交互是开发过程中常见的任务之一。本教程主要关注如何在不同版本的Android系统中处理联系人数据,特别是从Android 2.0到1.6的过渡。首先,我们来深入了解Android 2.0及更高版本中的...

    Excel.2013.Working.with.Data.Ranges.and.Tables

    Rivers courses Microsoft® Excel® 2013: Getting Started with Excel and Microsoft® Excel® 2013: Creating and Formatting Charts or the equivalent experience working with Excel 2013 in the Windows ...

    Retrofit: Love Working with APIs on Android PDF

    Retrofit: Love Working with APIs on Android You need to take delight building API clients on Android. Marcus Pöhls

    Pro ADO.NET Data Services: Working with RESTful Data

    Description: Pro ADO.NET Data Services: Working with RESTful Data is aimed at developers interested in taking advantage of the new REST–style data services that ADO.NET Data Services (formerly code–...

    Creating.Dynamic.UI.with.Android.Fragments.2nd.Edition.1785889

    This book is for developers with a basic understanding of Android programming who would like to improve the appearance and usability of their applications by creating a more interactive user ...

    10 Working with the Constraint Layout & Creating Multiple Layouts

    本课程"10 Working with the Constraint Layout & Creating Multiple Layouts"专注于讲解如何使用ConstraintLayout以及如何为不同的设备屏幕尺寸创建多个布局。 ConstraintLayout的主要优势在于它能够帮助开发者...

    Professional Android Programming With Mono for Android and .NET/C#

    7. 第7章“Working with the FileSystem and Application Preferences”指导读者如何管理和使用Android文件系统以及应用偏好设置。 8. 第8章“Programming with the Device Hardware”则深入到与设备硬件交互,例如...

    Windows Mobile 开发黄金周(4):Working with the User Interface

    在本节“Windows Mobile开发黄金周(4):Working with the User Interface”中,我们将深入探讨如何在Windows Mobile平台上创建用户界面。用户界面是任何应用程序的核心部分,它决定了用户与应用交互的方式。Windows ...

    Working.with.Odoo.1784394556

    Working with Odoo covers all the core installation and usage functionalities of this popular tool, helping you to fully implement a working ERP system through practical, advanced, real-world examples....

Global site tag (gtag.js) - Google Analytics