Android日程表应用整合开发实例

Android日程表应用整合开发实例(转载)

日程表是智能手机的一个重要功能,然而目前还没有任何文档来描述在Android上整合日程表应用。本文通过对谷歌日程表应用进行程序的逆向工程,提供了整合Android日程表应用的功能。
Android手机一般都内置一个日程表(Calendar)应用。第三方应用程序可以利用日程表内容提供程序的接口,实现阅读用户日程安排信息和在日程表中安排新事件。这个日程表应用可以直接与用户的谷歌日程表应用实现内容同步。

不幸的是,并没有任何文档来描述在Android上整合日程表应用,或者类似联系人应用的其它应用。本文中的所有信息均来自于对谷歌日程表应用内容提供程 序的逆向工程。这个接口经常发生变化,而且支持的功能有限。但是,对某些类型的应用程序来说,整合日程表应用可能是一个非常强大的功能。

本文中的代码已经在Android 2.0 SDK以前的版本上进行过测试。由于目前市场上没有Android 2.0手机,我们还不能确保它可以运行在哪些即将发布的设备上。我们在T-Mobile G1(SDK 1.6)上测试运行了这些代码。

访问日程表数据

为了向你的Android应用添加日程表支持,你必须增加以下代码到你应用程序的AndroidManifest.xml文件中:

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


复制代码
登记这些许可后,你可以访问用户的日程表数据,而无需处理任何谷歌登录问题。由于日程表应用没有被安装在Android模拟器中,因此所有测试和开发工作 必须在安装了日程表应用的真机上进行,使用模拟器无法启动相应的提供程序。日程表应用和内容提供程序被包含在支持谷歌服务的Android手机中,诸如 T-Mobile G1。

检索用户日程表事件列表

每个用户可能在日程表应用中具有众多指定的日程安排。举例来说,一个用户可能同时拥有工作日程安排、个人日程安排和节日日程安排。

通过使用内容提供程序接口,可实现访问用户配置的日程安排。为了取回用户日程安排的事件列表,我们需要为日程表内容提供程序编写一个合适的Uri查询,如下所示:

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


复制代码
现在,这个查询将返回所有日程安排,其中包括那些未处于激活状态的安排。为了只获得活跃日程安排的列表,我们需要限制我们的查询只返回“selected”字段值为真的记录:

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


复制代码
现在我们得到了一个日程表的列表。我们可以通过下面的代码排列查询结果:

    * 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());  }


复制代码
一旦我们知道了希望访问哪一个日程安排后,我们可以增加一个日程表事件。日程表事件有许多重要的字段,其中包括事件题目、时间和位置等信息,以及该事件条目在日程表中的显示方式等。日程表事件可以是一次性或重复性发生的。

增加单次发生事件到日程表

要想增加条目到一个特定日程表,我们需要使用ContentValues配置一个日程表条目插入:
ContentValues event = new ContentValues(); 每一个事件需要被指定到一个特定日程表,因此你需要首先通过日程表标识来实现插入这条事件:

event.put("calendar_id", calId); 然后我们再设置该事件的基本信息,包括诸如事件题目、描述和位置等字符段。

event.put("title", "Event Title");  event.put("description", "Event Desc");  event.put("eventLocation", "Event Location"); 另外还有许多不同的选项来配置事件的时间和日期。我们可以使用以下代码设定事件的起始时间信息:

long startTime = START_TIME_MS;  long endTime = END_TIME_MS;  event.put("dtstart", startTime);  event.put("dtend", endTime); 如果我们需要添加一个生日或节假日,我们可以设置该条目为全天事件:

event.put("allDay", 1);   对多数条目来说,这些信息已经足够。不过,还有许多其它有用的日程表条目属性。举例来说,你可以设置时间状态为暂时性(值为0)、习惯性(值为1)或取消(值为2):

event.put("eventStatus", 1); 你还可以控制谁可以查看它,设定其可见性为默认(值为0)、机密(值为1)、私有(值为2)或公开(值为3):

event.put("visibility", 0); 你可以控制该事件是否触发告警:

event.put("hasAlarm", 1);  一旦日程表事件被正确配置后,我们就可以使用ContentResolver来插入这条新日程表安排到具有合适Uri的日程表事件中:
insert()方法的调用可以建立与程表内容提供程序的联系,并尝试插入该条目到相应的用户日程表中。如果你找到日程表应用并启动它,你会看到你的日程 表条目已经在相应日程表中。如果你使用谷歌在线日程表服务,由于日程表应用具有自动同步功能,你也会看到该条目已经出现于在线服务中。

增加一个重复发生事件到日程表

你还可以配置重发性日程表事件。你只需要按照重发性规则的形式为该事件增加几个字段即可。该规则的详细说明基于RFC2445。

Android应用能够与许多Android手机用户的日程表应用紧密配合。日程表功能需要通过内容提供程序接口来访问,这让第三方应用程序可以阅读日程表信息和增加新日程安排。



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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值