Android手机配备有一个内置的日历应用程序。第三方应用程序可以利用日历内容提供商接口读取用户的日历信息和安排在日历新的事件。这个日历可以直接同步用户的谷歌日历。
不幸的是,没有文档和Android手机的日历应用集成,因为有另外一个联系人应用程序。相反,本文所提供的所有信息,将会通过逆向工程的谷歌日历内容提供商。该接口是受变化的,将会支持有限的功能。然而,日历一体化可以成为一些类型的应用强大的功能。
本文的代码测试之到Android 2.0 SDK版本。我们将发布一个更新如果有一个很大的转变。我们没有测试这个装置,如早先的T - Mobile G1的(SDK的1.6)代码。
访问日历数据
为了支持添加到您的日历的Android应用程序,您必须给你的应用程序添加以下权限AndroidManifest.xml文件:
1 android:name="android.permission.READ_CALENDAR">
3 android:name="android.permission.WRITE_CALENDAR">4
注册这些权限允许您访问谷歌登录用户的日历数据,无需处理任何问题。该日历应用程序未安装在Android模拟器,因此所有的测试和开发必须在日历应用程序实际完成安装的设备(使用模拟器将无法启动相应的提供者)。日历应用程序和内容提供商可在与谷歌服务,例如T - Mobile G1。
检索用户日历列表
用户可能在日历应用程序配置有很多名称的日历。例如,用户可能有一个工作日历(工作日历有关的活动),家庭日历(个人的)和假日日历(法定假日)。
由用户配置的日历使用并访问内容提供商接口。为了检索用户的日历列表,我们需要为适当Uri以及日历内容提供商设计查询,如下所示:
1 String[] projection = new String[] { "_id", "name" };
3 Uri calendars = Uri.parse("content://calendar/calendars");
5 Cursor managedCursor =
7 managedQuery(calendars, projection, null, null, null);
现在,这个查询将返回所有日历,包括那些平时不会用到的。为了得到一个活跃的日历列表单,我们需要在“选择”设置为true的领域在内限制我们的查询
1 String[] projection = new String[] { "_id", "name" };
2
3 Uri calendars = Uri.parse("content://calendar/calendars");
4
5 Cursor managedCursor =
6
7 managedQuery(calendars, projection,
8
9 "selected=1", null, null);
10
我们现在检索的日历列表。我们可以遍历的结果如下:
1 if (managedCursor.moveToFirst()) {
2
3 String calName;
4
5 String calId;
6
7 int nameColumn = managedCursor.getColumnIndex("name");
8
9 int idColumn = managedCursor.getColumnIndex("_id");
10
11 do {
12
13 calName = managedCursor.getString(nameColumn);
14
15 calId = managedCursor.getString(idColumn);
16
17 } while (managedCursor.moveToNext());
18
19 }
20
21
一旦我们知道我们想要访问的日历,我们可以添加一个日历事件。日历事件有一些重要领域,其中包括如活动名称,时间和地点以及设置的信息,哪一项将被显示在日历。日历事件可能是一次性或经常性的。
给日历增加单一事件发生的情况
添加一个条目到特定的日历,我们需要配置一个日历项插入使用与ContentValues如下:
1 ContentValues event = new ContentValues();
每个活动必须与特定日历结合,所以,首先你会想到的是为此事件插入日历标识符。
1 event.put("calendar_id", calId);
然后,我们设置了有关事件,其中包括活动的标题,描述和位置弦乐领域的一些基本信息。
1 event.put("title", "Event Title");
2
3 event.put("description", "Event Desc");
4
5 event.put("eventLocation", "Event Location");
6
有许多不同的配置选项来设置事件的时间和日期。
我们可以设置事件的开始和结束的信息如下:
1 long startTime = START_TIME_MS;
2
3 long endTime = END_TIME_MS;
4
5 event.put("dtstart", startTime);
6
7 event.put("dtend", endTime);
8
如果我们增加了生日或假日,我们会设置一个全天事件的条目:
1 event.put("allDay", 1); // 0 for false, 1 for true
这一信息对于大多数项足够了。但是,有一些其他有用的日历项属性。
例如,您可以设置事件状态暂定(0),确认(1)或取消(2):
1 event.put("eventStatus", 1);
您可以控制可以看到它的可见性设置为默认值(0此事件),保密(1),私营(2),或公共(3):
1 event.put("visibility", 0);
您可以控制日历上事件是否消耗时间,通过设置其透明度,不透明(0)或透明(1)。
1 event.put("transparency", 0);
您可以控制是否事件触发报警,提醒如下:
1 event.put("hasAlarm", 1); // 0 for false, 1 for true
一旦日历事件配置正确,我们已经准备好使用ContentResolver插入到相应的开放新日历的日历事件项:
1 Uri eventsUri = Uri.parse("content://calendar/events");
2
3 Uri url = getContentResolver().insert(eventsUri, event);
4
该调用insert()方法接触的日历内容提供商,并试图插入到相应的用户的日历项。如果您导航到日历应用程序和启动它,你应该看到您在适当的日历中的日历项。自日历同步,你也看到日历项在线,如果你在网络上使用的谷歌日历。
添加一个定期事件的日历
您也可以设定定期日历事件。为了做到这一点,你必须根据当前的规则添加更多的字段。规则是根据RFC2445。
结论
Android应用程序可以集成与用户的日历密切的许多Android设备。该日历功能是通过一条内容提供商的接口,允许第三方应用程序访问日历信息,并添加新日历项。
分享到:
相关推荐
首先,我们需要了解Android系统自带的CalendarView控件,虽然它可以提供基本的日历展示,但往往不能满足复杂或个性化的需求,如自定义样式、颜色、选中状态等。因此,自定义日历控件成为了一种必要。 1. **自定义...
Android系统自带的日历控件通常是预设的样式,但通过继承`CalendarView`或使用第三方库,我们可以创建自定义的布局来改变日期显示、颜色、字体等元素。这涉及到对Android的UI组件的深入理解和XML布局文件的编辑。 ...
学习Android自带应用程序源代码的过程通常涉及阅读代码、追踪函数调用、理解类结构和数据模型。开发者可以使用IDE(如Android Studio)来导入源代码项目,进行调试和实验,以加深理解。 总的来说,"android自带应用...
在Android开发中,自定义日历控件是一个常见的需求,特别是在设计具有个性化界面或特定功能的应用时。...开发者在压缩包中提供的代码可以作为一个学习和参考的资源,帮助其他开发者快速集成或改进自己的日历功能。
这里我们将深入探讨“android系统自带闹钟源码”中的关键知识点,以帮助理解其工作原理,并从中学习如何优化和扩展相关功能。 1. **AlarmManager服务**:AlarmManager是Android系统提供的一种用于调度定时任务的...
总之,卸载安卓Android系统的自带程序需要谨慎操作,尤其是在获取root权限后。了解每个应用的作用并权衡其对系统的影响至关重要。同时,定期备份数据也是个好习惯,以防意外情况导致数据丢失。最后,对于不熟悉的...
6. **邮件和短信集成**:该应用能发送邮件和短信,这意味着它需要调用Android的Intent机制。通过创建一个Intent,指定ACTION_SEND,可以启动邮件或短信的发送界面,并预填充相关内容。 7. **权限管理**:在Android ...
Android源码资源包是开发Android应用或进行系统级定制时不可或缺的一部分。...在使用源码的过程中,配合IDE的代码导航功能(如Ctrl+鼠标左键),可以更方便地追踪函数调用和类继承关系,加深对Android系统的理解。
DatePicker是Android SDK自带的一个视图组件,用于让用户选择日期。它可以显示日、月和年,并且提供了可滚动的数字盘供用户操作。通过设置`android:calendarViewShown`和`android:datePickerMode`属性,可以选择显示...
- **应用程序**:Android随带了一系列核心应用程序,包括电子邮件客户端、短信程序、日历、地图、浏览器等,均使用Java语言编写。 - **应用程序框架**:提供了一套丰富的API,允许开发者访问核心应用程序的功能,并...
首先,Android自带的`DatePicker`是一个用于让用户选择日期的组件。在XML布局文件中,可以通过以下方式定义一个`DatePicker`: ```xml android:id="@+id/dpPicker" android:datePickerMode="spinner" android:...
Android平台自带了一系列基础应用程序,如邮件客户端、短信服务、日历、网页浏览器等,这些应用旨在满足用户的基本需求,同时也为开发者提供了一个展示和创新的起点。更高级、更个性化的应用程序则依赖于开发者社区...
这部分源码可能包含对Android系统自带的日历和时间选择器的自定义实现,或者是创建了自己的日期和时间选择组件。这涉及到对`DatePicker`和`TimePicker`控件的使用,以及可能的自定义视图设计,使用`Calendar`对象...
这一层包含了Android自带的一系列核心应用,如邮件客户端、短信程序、日历、地图等。所有这些应用均使用Java语言编写,通过调用下层提供的APIs来实现具体功能。 ### Android应用程序的构成 对于一个典型的Android...
在Android实例开发中,"HelloDatePicker"通常是一个基础的日期选择器示例,它展示了如何在应用程序中集成和使用Android自带的DatePicker组件。这个实例对于初学者来说是至关重要的,因为它帮助理解Android UI元素的...
- **核心应用程序**:Android自带了一套核心应用,如邮件客户端、日历、地图等,大部分由Java语言编写。开发者可以在此基础上进行扩展和定制,以满足特定需求。 - **应用框架**:Android的应用框架包含多个可复用...