Android手机配备有一个内置的日历应用程序。第三方应用程序可以利用日历内容提供商接口读取用户的日历信息和安排在日历新的事件。这个日历可以直接同步用户的谷歌日历。
不幸的是,没有文档和Android手机的日历应用集成,因为有另外一个联系人应用程序。相反,本文所提供的所有信息,将会通过逆向工程的谷歌日历内容提供商。该接口是受变化的,将会支持有限的功能。然而,日历一体化可以成为一些类型的应用强大的功能。本文的代码测试之到Android 2.0 SDK版本。
一、访问日历数据
为了支持添加到您的日历的Android应用程序,您必须给你的应用程序添加以下权限AndroidManifest.xml文件:
android:name="android.permission.READ_CALENDAR">
android:name="android.permission.WRITE_CALENDAR">
注册这些权限允许您访问谷歌登录用户的日历数据,无需处理任何问题。该日历应用程序未安装在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);
现在,这个查询将返回所有日历,包括那些平时不会用到的。为了得到一个活跃的日历列表单,我们需要在“选择”设置为true的领域在内限制我们的查询:
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 for false, 1 for true
这一信息对于大多数项足够了。但是,有一些其他有用的日历项属性。
例如,您可以设置事件状态暂定(0),确认(1)或取消(2):
event.put("eventStatus", 1);
您可以控制可以看到它的可见性设置为默认值(0此事件),保密(1),私营(2),或公共(3):
event.put("visibility", 0);
您可以控制日历上事件是否消耗时间,通过设置其透明度,不透明(0)或透明(1)。
event.put("transparency", 0);
您可以控制是否事件触发报警,提醒如下:
event.put("hasAlarm", 1); // 0 for false, 1 for true
一旦日历事件配置正确,我们已经准备好使用ContentResolver插入到相应的开放新日历的日历事件项:
Uri eventsUri = Uri.parse("content://calendar/events");
Uri url = getContentResolver().insert(eventsUri, event);
该调用insert()方法接触的日历内容提供商,并试图插入到相应的用户的日历项。如果您导航到日历应用程序和启动它,你应该看到您在适当的日历中的日历项。自日历同步,你也看到日历项在线,如果你在网络上使用的谷歌日历。
四、添加一个定期事件的日历
您也可以设定定期日历事件。为了做到这一点,你必须根据当前的规则添加更多的字段。规则是根据RFC2445。
五、结论
Android应用程序可以集成与用户的日历密切的许多Android设备。该日历功能是通过一条内容提供商的接口,允许第三方应用程序访问日历信息,并添加新日历项。
摘自:http://www.cmd100.com/bbs/thread-146258-1-1.html
分享到:
相关推荐
7. **适配不同设备和Android版本**: 考虑到Android的碎片化问题,自定义的日历控件需要兼容不同的屏幕尺寸、分辨率和Android版本,可能需要使用Support Library或AndroidX库来保证兼容性。 8. **无障碍功能**: 为了...
首先,我们关注的"android日历控件"是一个用于显示日期并允许用户交互的组件,它通常包括月份和日期的选择,以及可能的事件添加和查看功能。在Android SDK中,虽然系统自带了一些基本的日历API,如`Calendar`类和`...
在Android应用开发中,日历控件是一种常用的组件,它允许用户方便地选择日期,常用于事件安排、约会提醒等功能。本压缩包提供的是关于如何在Android中实现自定义日历控件的源代码示例。下面将详细介绍如何在Android...
"android 日历控件源码.rar"是一个包含Android日历控件源代码的压缩包,用于帮助开发者深入理解日历控件的工作原理,并可以根据需求进行自定义修改。以下是关于Android日历控件的详细知识点: 1. **日历API**:...
标题“超级漂亮的Android日历控件”暗示我们这里有一个美观且易用的日历视图,可能是一个自定义控件或者第三方库。描述中提到,这个控件已经具备基本功能,开发者只需进行简单的调整或扩展,即可满足个性化需求。 ...
在Android开发中,创建一个能够实现月视图与周视图切换的日历控件是一项常见的需求,这样的控件可以提供用户友好的界面,方便他们在不同的时间尺度上查看和管理事件。"android-collapse-calendar-view-develop"这个...
本源代码示例提供了一种实现Android日历控件的方法,非常适合Android开发者,特别是初学者,作为学习和理解此类控件工作原理的实例。 首先,Android的日历功能主要依赖于`CalendarView`和`DatePicker`这两个核心...
在Android开发中,日历控件是经常被用于展示日期选择、事件标记等场景的关键组件。本篇将详细探讨如何实现一个自定义的日历控件,包括日历月份的切换以及给特定日期添加标记的功能。 首先,Android SDK自带了一个...
这个"android 日历控件 测试 demo"涵盖了Android开发中的多个重要知识点,包括但不限于日历控件的基本使用、自定义视图、事件监听、日期时间处理、数据持久化和适配器模式。通过深入研究和实践这个Demo,初学者能够...
总的来说,“Android日历控件Demo”提供了关于如何在Android应用中创建和使用自定义日历控件的实例,涵盖了从基本功能到高级定制的各个方面,对于需要在应用中集成日历功能的开发者来说,是一个很好的学习和参考资源...
本项目“Android带日程安排的自定义日历控件”就是一个典型的例子,它允许用户查看和管理他们的日程,同时通过红点提示有未处理的日程。下面将详细阐述这个项目的实现细节、涉及的技术点以及如何进行实践。 1. **...
总结来说,自定义Android日历控件涉及到UI设计、绘图逻辑、事件处理和数据绑定等多个方面。开发者需要对Android的视图系统有深入理解,同时也需要一定的布局和绘图技巧。通过这样的实践,不仅可以创建出符合应用需求...
总的来说,Android自定义日历控件实例源码提供了一个实现自定义日历的完整解决方案,包括了从布局设计到事件处理的全过程。通过学习和理解这个实例,开发者可以掌握自定义控件开发的基本技巧,并能在此基础上进行更...
在IT领域,日历控件是一种常见的用户界面元素,它允许用户方便地选择日期或查看日期安排。在本文中,我们将深入探讨日历控件的种类、用途、设计原则以及如何在不同编程语言和框架中实现和应用这些控件。 首先,让...
本文将详细解析“Android日历控件”的使用,并结合给定的文件结构,阐述其核心概念和实现方法。 首先,Android系统提供了一个内置的日历应用,但如果你需要自定义或者在自己的应用中集成日历功能,就需要使用到特定...
在Android开发中,自定义日历控件是一个常见的需求,特别是在构建日程管理或时间规划类应用时。`mycalender`项目显然提供了一个自定义的日历视图,以满足开发者对日历显示和交互的个性化需求。下面将详细介绍自定义...
此外,日历控件还应考虑无障碍性,确保视觉障碍的用户也能通过辅助技术轻松使用。 性能优化也是不可忽视的。如果日历控件处理大量数据,如显示未来几年的日期,优化渲染速度和内存占用就显得尤为重要。开发者可能...
通过使用Android提供的组件和API,我们可以构建一个功能齐全且具有交互性的日历控件。在实践中,不断优化和改进,以满足用户的实际需求和良好的用户体验。记住,一个好的自定义日历控件不仅要有基本的日期切换和显示...
本文实例为大家分享了Android日历控件的使用方法,供大家参考,具体内容如下 MainActivity.java代码: package siso.timessquare; import android.content.Intent; import android.support.v7.app.AppCompatActivity...
本主题将深入探讨多个实用且功能强大的Android日历控件,这些控件可以极大地提升应用的时间管理和用户体验。 首先,我们要了解Android系统自带的日历API。Android提供了`CalendarContract`类,它是一个用于访问系统...