`
huaxin803
  • 浏览: 115551 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android 日历提供器(三)

 
阅读更多
日历的Intent对象

你应用程序不需要读写日历数据的权限,它可以使用Android的Calendar应用程序支持的Intent对象来替代你的应用程序的读写权限。下表列出了Calendar提供器支持的Intent对象:

动作

资源标识(URI)

描述

附加功能

VIEW

content://com.android.calendar/time/<ms_since_epoch>

也能够用CalendarContract.CONTENT_URI来引用这个URI

打开由<ms_since_epoch>指定时间的日历

VIEW

content://com.android.calendar/events/<event_id>

也能使用Events。CONTENT_URI来引用这个URI。

查看由<event_id>指定的的事件

CalendarContract.EXTRA_EVENT_BEGIN_TIME

CalendarContract.EXTRA_EVENT_END_TIME

EDIT

Content://com.android.calendar/events/<event_id>

也能使用Events.CONTENT_URI来引用这个URI

编辑由<event_id>指定的事件

CalendarContract.EXTRA_EVENT_BEGIN_TIME

CalendarContract.EXTRA_EVENT_END_TIME

INSERT

content://com.android.calendar/events

也能够使用Events.CONTENT_URI来引用这个URI

创建一个事件

在下表中列出的任意附加功能

下表列出了Calendar提供器支持的Intent对象的附加功能:

Intent对象附加功能

描述

Events.TITLE

给事件命名

CalendarContract.EXTRA_EVENT_BEGIN_TIME

从纪元开始用毫秒设定事件的开始时间

CalendarContract.EXTRA_EVENT_END_TIME

从纪元开始用毫秒设定事件的结束时间

CalendarContract.EXTRA_EVENT_ALL_DAY

一个布尔值,指定事件是否是全天的。

Events.EVENT_LOCATION

事件的地点

Events.DESCRIPTION

事件的描述

Intent.EXTRA_EMALL

用逗号分开的受邀者电子邮件地址列表

Events.RRULE

事件的重复规则

Events.ACCESS_LEVEL

事件是私有还是共有的

Events.AVAILABILITY

预定事件是在忙时计数还是在闲时计数

以下介绍如何使用这些Intent对象:

1. 使用插入事件的Intent对象

使用INSERT类型的Intent对象会让你的应用程序把事件的插入的任务交给Calendar应用自己。用这种方法,你的应用程序不需要在清单文件中生命WRITE_CALENDAR权限。

当用户运行使用这种方法的应用程序时,应用程序会借助Intent对象把事件信息发送给Calendar应用程序来完成添加事件的处理。INSERT类型的Intent对象使用附加字段来预装一个带有Calendar应用中事件详细信息的表单。为了编辑表单的需要,用户可以取消这个事件,也可以把事件保存到它们的日历中。

以下代码段规划了一个在2011年1月19日上午7:30到8:30运行的事件。代码说明如下:

A.它指定Events.CONTENT_URI作为Uri;

B.它使用CalendarContract.EXTRA_EVENT_BEGIN_TIME和CalendarContract.EXTRA_EVENT_END_TIME附件字段来预装带有事件时间的表单。这些时间值必须是从纪元开始的UTC毫秒。

C.它使用Intent.EXTRA_EMAIL附加字段来提供一个用逗号分隔的受邀者电子邮件列表。

Calendar beginTime = Calendar.getInstance();
beginTime.set(2012, 0, 19, 7, 30);
Calendar endTime = Calendar.getInstance();
endTime.set(2012, 0, 19, 8, 30);
Intent intent = new Intent(Intent.ACTION_INSERT)
        .setData(Events.CONTENT_URI)
        .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.getTimeInMillis())
        .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime.getTimeInMillis())
        .putExtra(Events.TITLE, "Yoga")
        .putExtra(Events.DESCRIPTION, "Group class")
        .putExtra(Events.EVENT_LOCATION, "The gym")
        .putExtra(Events.AVAILABILITY, Events.AVAILABILITY_BUSY)
        .putExtra(Intent.EXTRA_EMAIL, "rowan@example.com,trevor@example.com");
startActivity(intent);

2. 使用编辑事件的Intent对象

你能够像“更新事件”一节中介绍的那样直接更新一个事件。但是使用EDIT类型的Intent对象允许没有权限的应用程序把要编辑的事件交给Calendar应用程序来处理。当用户在Calendar应用程序中完成编辑事件的处理时,就会返回原来的应用程序。

下面这个例子使用Intent对象给特定的事件设置一个新的标题,并且要用户在Calendar应用程序中编辑事件。

long eventID = 208;
Uri uri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID);
Intent intent = new Intent(Intent.ACTION_EDIT)
    .setData(uri)
    .putExtra(Events.TITLE, "My New Title");
startActivity(intent);

3. 使用Intent对象来查看日历数据

Calendar提供器提供了两种使用VIEW类型Intent对象的方法

A.打开一个特殊日期的日历

B.查看一个事件

下例子显示怎样打开一个特殊日期的日历:

// A date-time specified in milliseconds since the epoch.
long startMillis;
...
Uri.Builder builder = CalendarContract.CONTENT_URI.buildUpon();
builder.appendPath("time");
ContentUris.appendId(builder, startMillis);
Intent intent = new Intent(Intent.ACTION_VIEW)
    .setData(builder.build());
startActivity(intent);

下例显示了怎样打开一个要查看的事件:

long eventID = 208;
...
Uri uri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID);
Intent intent = new Intent(Intent.ACTION_VIEW)
   .setData(uri);
startActivity(intent);

同步适配器

应用程序和同步适配器访问Calendar提供器的方式仅有较小的差异:

1. 同步适配器需要通过把CALLER_IS_SYNCADAPTER设置为true来指定它是一个同步适配器;

2. 同步适配器需要提供一个ACCOUNT_NAME和ACCOUNT_TYPE作为URI中的查询参数;

3. 同步适配器有写访问权限的列比应用程序或widget要多。例如,应用程序只能修改一些日历的字符,如名字、显示名、可见设置、以及日历是否被同步。同步适配器不仅能够访问这些列,而且还有一些其他列,如日历的颜色、时区、访问级别、地点等等。但是同步适配器要受到ACCOUNT_NAME和ACCOUNT_TYPE的限制。

你能够使用下面的这个帮助器方法来返回一个给同步适配器使用的URI:

 static Uri asSyncAdapter(Uri uri, String account, String accountType) {
    return uri.buildUpon()
        .appendQueryParameter(android.provider.CalendarContract.CALLER_IS_SYNCADAPTER,"true")
        .appendQueryParameter(Calendars.ACCOUNT_NAME, account)
        .appendQueryParameter(Calendars.ACCOUNT_TYPE, accountType).build();
 }

注:本人转载系个人觉得翻译的很好,值得收藏,且自己回头看着方便。

如有兴趣请访问作者官方博客http://blog.csdn.net/FireOfStar


分享到:
评论

相关推荐

    一个Android日历管理器,提供向系统日历插入日历账户、查询日历账户.zip

    一个Android日历管理器,提供向系统日历插入日历账户、查询日历账户、添加修改删除日历事件以及事件提醒等功能,是时候为你的APP增加一个事件提醒功能啦! 软件开发设计:PHP、QT、应用软件开发、系统软件开发、移动...

    Android 日历 年月选择器

    这个“Android日历年月选择器”功能是为了解决这样的需求,它允许用户通过简单的滚动操作来选取年份和月份,而无需打开完整的日历视图。下面将详细介绍如何实现这样一个组件,以及它可能涉及到的关键知识点。 首先...

    Android日历行程.rar

    这个"Android日历行程"的压缩包文件可能包含了关于如何在Android平台上操作和开发日历应用的相关资料,比如`Calendar_01`可能是一个文档或者源代码,详细讲解了Android日历API的使用。 Android的日历API提供了丰富...

    android日历demo

    本示例"android日历DemoCalendar"提供了一个完整的日历应用实例,适用于初学者和开发者学习使用。下面我们将详细探讨这个Demo中涉及的关键知识点。 1. **Android Calendar API**:Android系统提供了Calendar API,...

    Android日历可左右活动上下定位收缩

    "Android日历可左右活动上下定位收缩"这个项目的核心在于实现一个高度自定义的日历控件,以下将详细解释实现这一功能的关键知识点。 首先,我们需要了解Android的View体系结构。在Android中,自定义视图通常继承自...

    Android日历签到

    综上所述,实现“Android日历签到”功能,需要掌握Android日历API的使用,包括获取日历权限、查询日历源、创建和管理日历事件,以及在UI上展示签到信息。通过这一系列步骤,用户就能在自己的Android设备上方便地进行...

    android 日历、日程记录

    下面我们将深入探讨Android日历和日程记录的相关知识点。 一、Android系统日历API Android提供了Calendar Provider API,允许应用访问和修改用户的日历数据。开发者可以通过ContentResolver和Uri对象来操作日历和...

    Android 日历、Android 农历日历 Android 日历节假日

    以下是对标题“Android日历、Android农历日历、Android日历节假日”以及描述中所述知识点的详细阐述。 1. **Android日历API**: Android提供了`android.provider.CalendarContract`类,它是Android系统日历服务的...

    Android日历

    本文将深入探讨Android日历相关的知识点,基于提供的"Android日历"源代码,我们将涵盖以下主题:日历API的使用、日历应用的架构、权限管理、UI设计、事件操作以及如何实现自定义日历视图。 1. **Android日历API**:...

    Android日历+记事本源码

    这个“Android日历+记事本源码”项目,正是实现了这样的功能,它将日历组件与记事本功能巧妙地结合在一起,为用户提供了一个实用的工具。 首先,我们来详细了解一下日历功能的实现。在Android中,日历功能主要通过`...

    android 日历的 demo 项目

    "android 日历的 demo 项目" 提供了一个完整的Android应用程序示例,帮助开发者理解和实现日历相关的功能。以下是对这个项目的详细解读: 1. **日历API**: Android系统提供了`android.app.CalendarContract`类,...

    android 日历精美控件

    "android 日历精美控件"通常指的是那些设计美观、功能丰富的第三方日历组件,它们可以增强应用程序的用户体验。Caldroid是其中一个广受欢迎的开源库,它的全名是"Caldroid-master",在GitHub等平台上有大量的开发者...

    android 日历控件源码.rar

    "android 日历控件源码.rar"是一个包含Android日历控件源代码的压缩包,用于帮助开发者深入理解日历控件的工作原理,并可以根据需求进行自定义修改。以下是关于Android日历控件的详细知识点: 1. **日历API**:...

    android日历可以安排工作

    "android日历可以安排工作"这一特性,使得用户能够在移动设备上方便地创建、编辑和查看工作相关的日程,提高效率。 首先,Android日历API是开发者用于构建与日历数据交互的应用的重要工具。从Android 1.6(Donut)...

    android谷歌日历源码 android日历源码 android 源码

    1. **Content Provider**:Android日历功能的核心是Content Provider,它负责存储和管理日历数据。开发者可以学习如何创建和维护自定义的Content Providers来扩展或替换系统的日历功能。 2. **数据库操作**:源码...

    android日历的实现

    总之,实现一个Android日历功能涉及多个方面,包括UI布局、日期处理逻辑、事件处理、性能优化和兼容性考虑。通过自定义控件,你可以根据需求打造出独特且功能完善的日历组件。在实际开发过程中,不断调试和优化,...

    自定义实现Android日历

    在Android平台上,自定义日历视图是一种常见的需求,它能够提供更为个性化和功能丰富的用户体验。Caldroid是一个流行的开源库,专为Android设计,用于创建美观且易用的日历组件。通过Caldroid,开发者可以轻松地在...

    android日历控件

    首先,我们关注的"android日历控件"是一个用于显示日期并允许用户交互的组件,它通常包括月份和日期的选择,以及可能的事件添加和查看功能。在Android SDK中,虽然系统自带了一些基本的日历API,如`Calendar`类和`...

    Android日历有闹钟提醒功能记事功能等

    Android日历提供多种视图,包括日视图、周视图、月视图和年视图。用户可以根据需求切换,快速查看不同时间段的日程安排。 2. **创建事件** 用户可以轻松创建新的日程事件,输入标题、开始时间、结束时间,并选择...

Global site tag (gtag.js) - Google Analytics