Android 日历提供器(一)

来源:互联网 发布:北京农大动物医院知乎 编辑:程序博客网 时间:2024/05/23 12:04
 日历提供器是针对用户日历事件的一个资源库。日历提供器API允许你执行有关日历、、事件、会议、提醒等内容的查询、插入、更新、删除操作。

日历提供器API能够用于应用程序和同步适配器,规则的变化依赖于什么类型的程序制造了这个调用。本文重点关注应用程序怎样使用日历提供API。对于与同步适配器的不同的讨论,请看同步适配器。

通常,要读或写日历数据,应用程序的清单文件中必须包含“用户权限”一节中描述的适当的权限,为了让执行普通的的操作更加容易,日历提供器提供了一组在“日历Intent对象”一节中介绍的Intent对象。这些Intent对象携带了用户要日历提供器来插入、查看和编辑的事件。用户跟日历应用程序交互,然后返回到初始应用程序。这样你的应用程序不需要申请权限,也不需要提供查看或创建事件用的的用户界面。

基础

内容提供器保存数据并且使它对应用程序是可访问的。通常,通过Android平台(包括日历提供器)内容提供器以基于关系性数据库模型的表的集合的形式来暴露数据,每一行是一个记录,每一列是一种特定类型的数据。通过日历提供器API,应用程序和同步适配器能够获得对持有用户日历数据的数据库表的读写访问权限。

每个内容提供器都会公开一个公共的唯一标识它的数据集的URI(被封装成Uri对象)。一个内容提供器控制着多个数据集(多个表),给每个表都公开一个独立的URI。提供器的所有URI都以“content//”开头。这是作为由内容提供器控制的数据的标识。日历提供器给它的每个类(表)都定义了URI常量。这些URI的格式是<class>.CONTENT_URI。例如:EVENTS.CONTENT_URI.

图1显示了日历提供器的数据模型,它显示主表和把它们彼此联系到一起的字段。

pic

图1.日历提供器数据模型

 一个用户能够有多个日历,并且不同的日历能够跟不同的账号类型进行关联。

CalendarContract类定义了日历和事件相关信息的数据模型。这种数据被保存在以下列出的多个表中。

表(类)

描述

CalendarContract.Calendars

这个表保存指定日历的信息,在这个表中每一行都包含一个单一日历的详细信息,如名字、颜色、同步信息等。

CalendarContract.Events

这个表保存了特定的事件信息。在这个表中每一行都有单一事件的信息,如事件的标题、位置、开始时间、结束时间等。这个事件能够发生一次或重复发生多次。会议、提醒和扩展的属性被保存的独立的表中,它们都有一个EVENT_ID跟Events表中的_ID进行关联。

CalendarContract.Instances

这个表保存一个事件每次发生的开始事件和结束时间。这个表中的每一行都代表了一个单一的已经发生了的事件。对于一次性事件这个表与Events表有1对1的映射,对于重复发送的事件,每次发生的结果都会自动的在这个表中生产一行。

CalendarContract.Attendees

这表保存事件的参与者信息。每行代表一个单一的事件参与者。它指定了参与者类型以及参与者对事件的参与响应

CalendarContract.Reminders

这个表保存了警告/提醒数据。每行代表一个事件的一个警告。一个事件能够有多个提醒。每个事件的最大提醒数据在MAX_REMINDERS中指定,它是由给定日历的同步适配器来设定的。在事件之前的几分中内来指定提醒,并且会有一个方法来判断如何对用户进行提醒。

 

日历提供器API被设计的灵活而且强大。重要的是它提供了良好的终端用户体验并且保护了日历和它的数据的完整性,因此在使用这些API时要记住以下事情:

1.  插入、更新、和查看日历事件:要直接从日历提供器中插入、修改、和读取事件,你需要适当的权限。但是,如果你不是要创建一个完整的日历应用程序或同步适配器,就没有必要申请这些权限。你能够使用由Android的日历应用程序支持的Intent对象来替代这些读写操作。当你使用Intent对象时,你的应用程序会把用户预填的表单发送给日历应用程序,让它执行期望的操作。执行完成后,会返回到你的应用程序。通过设计能够执行日历共同操作的应用程序,就可以给用户提供一致的、强大的用户界面。这是推荐的方法,有关更多的信息,请“看日历Intent对象”。

2.  同步适配器。同步适配器把用户设备上的日历数据跟另外的服务器或数据源同步。在CalendarContract.Calendars和CanlendarContract.Events表中,有一些保留给同步适配器使用的列。提供和应用程序不应该修改它们,直到它们被同步适配器访问时它们才可见。有关同步适配器的更多信息,请看“同步适配器”

用户权限

要读取日历数据,应用程序必须在清单文件中包括READ_CALENDAR权限。如果要删除、插入、或更新日历数据,就必须包含WRITE_CALENDAR权限。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"...>
    <uses-sdk android:minSdkVersion="14" />
    <uses-permission android:name="android.permission.READ_CALENDAR" />
    <uses-permission android:name="android.permission.WRITE_CALENDAR" />
    ...
</manifest>