新聞中心
【精選譯文】Android手機(jī)一般都內(nèi)置一個(gè)日程表(Calendar)應(yīng)用。第三方應(yīng)用程序可以利用日程表內(nèi)容提供程序的接口,實(shí)現(xiàn)閱讀用戶日程安排信息和在日程表中安排新事件。這個(gè)日程表應(yīng)用可以直接與用戶的谷歌日程表應(yīng)用實(shí)現(xiàn)內(nèi)容同步。

不幸的是,并沒(méi)有任何文檔來(lái)描述在Android上整合日程表應(yīng)用,或者類似聯(lián)系人應(yīng)用的其它應(yīng)用。本文中的所有信息均來(lái)自于對(duì)谷歌日程表應(yīng)用內(nèi)容提供程序的逆向工程。這個(gè)接口經(jīng)常發(fā)生變化,而且支持的功能有限。但是,對(duì)某些類型的應(yīng)用程序來(lái)說(shuō),整合日程表應(yīng)用可能是一個(gè)非常強(qiáng)大的功能。
本文中的代碼已經(jīng)在Android 2.0 SDK以前的版本上進(jìn)行過(guò)測(cè)試。由于目前市場(chǎng)上沒(méi)有Android 2.0手機(jī),我們還不能確保它可以運(yùn)行在哪些即將發(fā)布的設(shè)備上。我們?cè)赥-Mobile G1(SDK 1.6)上測(cè)試運(yùn)行了這些代碼。
訪問(wèn)日程表數(shù)據(jù)
為了向你的Android應(yīng)用添加日程表支持,你必須增加以下代碼到你應(yīng)用程序的AndroidManifest.xml文件中:
- android:name="android.permission.READ_CALENDAR">
- android:name="android.permission.WRITE_CALENDAR">
登記這些許可后,你可以訪問(wèn)用戶的日程表數(shù)據(jù),而無(wú)需處理任何谷歌登錄問(wèn)題。由于日程表應(yīng)用沒(méi)有被安裝在Android模擬器中,因此所有測(cè)試和開(kāi)發(fā)工作必須在安裝了日程表應(yīng)用的真機(jī)上進(jìn)行,使用模擬器無(wú)法啟動(dòng)相應(yīng)的提供程序。日程表應(yīng)用和內(nèi)容提供程序被包含在支持谷歌服務(wù)的Android手機(jī)中,諸如T-Mobile G1。
檢索用戶日程表事件列表
每個(gè)用戶可能在日程表應(yīng)用中具有眾多指定的日程安排。舉例來(lái)說(shuō),一個(gè)用戶可能同時(shí)擁有工作日程安排、個(gè)人日程安排和節(jié)日日程安排。
通過(guò)使用內(nèi)容提供程序接口,可實(shí)現(xiàn)訪問(wèn)用戶配置的日程安排。為了取回用戶日程安排的事件列表,我們需要為日程表內(nèi)容提供程序編寫(xiě)一個(gè)合適的Uri查詢,如下所示:
- String[] projection = new String[] { "_id", "name" };
- Uri calendars = Uri.parse("content://calendar/calendars");
- Cursor managedCursor =
- managedQuery(calendars, projection, null, null, null);
現(xiàn)在,這個(gè)查詢將返回所有日程安排,其中包括那些未處于激活狀態(tài)的安排。為了只獲得活躍日程安排的列表,我們需要限制我們的查詢只返回“selected”字段值為真的記錄:
- String[] projection = new String[] { "_id", "name" };
- Uri calendars = Uri.parse("content://calendar/calendars");
- Cursor managedCursor =
- managedQuery(calendars, projection,
- "selected=1", null, null);
現(xiàn)在我們得到了一個(gè)日程表的列表。我們可以通過(guò)下面的代碼排列查詢結(jié)果:
- 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());
- }
一旦我們知道了希望訪問(wèn)哪一個(gè)日程安排后,我們可以增加一個(gè)日程表事件。日程表事件有許多重要的字段,其中包括事件題目、時(shí)間和位置等信息,以及該事件條目在日程表中的顯示方式等。日程表事件可以是一次性或重復(fù)性發(fā)生的。
增加單次發(fā)生事件到日程表
要想增加條目到一個(gè)特定日程表,我們需要使用ContentValues配置一個(gè)日程表?xiàng)l目插入:
- ContentValues event = new ContentValues();
每一個(gè)事件需要被指定到一個(gè)特定日程表,因此你需要首先通過(guò)日程表標(biāo)識(shí)來(lái)實(shí)現(xiàn)插入這條事件:
- event.put("calendar_id", calId);
然后我們?cè)僭O(shè)置該事件的基本信息,包括諸如事件題目、描述和位置等字符段。
- event.put("title", "Event Title");
- event.put("description", "Event Desc");
- event.put("eventLocation", "Event Location");
另外還有許多不同的選項(xiàng)來(lái)配置事件的時(shí)間和日期。我們可以使用以下代碼設(shè)定事件的起始時(shí)間信息:
- long startTime = START_TIME_MS;
- long endTime = END_TIME_MS;
- event.put("dtstart", startTime);
- event.put("dtend", endTime);
如果我們需要添加一個(gè)生日或節(jié)假日,我們可以設(shè)置該條目為全天事件:
- event.put("allDay", 1);
對(duì)多數(shù)條目來(lái)說(shuō),這些信息已經(jīng)足夠。不過(guò),還有許多其它有用的日程表?xiàng)l目屬性。舉例來(lái)說(shuō),你可以設(shè)置時(shí)間狀態(tài)為暫時(shí)性(值為0)、習(xí)慣性(值為1)或取消(值為2):
- event.put("eventStatus", 1);
你還可以控制誰(shuí)可以查看它,設(shè)定其可見(jiàn)性為默認(rèn)(值為0)、機(jī)密(值為1)、私有(值為2)或公開(kāi)(值為3):
- event.put("visibility", 0);
你可以控制該事件是否觸發(fā)告警:
- event.put("hasAlarm", 1);
一旦日程表事件被正確配置后,我們就可以使用ContentResolver來(lái)插入這條新日程表安排到具有合適Uri的日程表事件中:
- Uri eventsUri = Uri.parse("content://calendar/events");
- Uri url = getContentResolver().insert(eventsUri, event);
#T#insert()方法的調(diào)用可以建立與程表內(nèi)容提供程序的聯(lián)系,并嘗試插入該條目到相應(yīng)的用戶日程表中。如果你找到日程表應(yīng)用并啟動(dòng)它,你會(huì)看到你的日程表?xiàng)l目已經(jīng)在相應(yīng)日程表中。如果你使用谷歌在線日程表服務(wù),由于日程表應(yīng)用具有自動(dòng)同步功能,你也會(huì)看到該條目已經(jīng)出現(xiàn)于在線服務(wù)中。
增加一個(gè)重復(fù)發(fā)生事件到日程表
你還可以配置重發(fā)性日程表事件。你只需要按照重發(fā)性規(guī)則的形式為該事件增加幾個(gè)字段即可。該規(guī)則的詳細(xì)說(shuō)明基于RFC2445。
Android應(yīng)用能夠與許多Android手機(jī)用戶的日程表應(yīng)用緊密配合。日程表功能需要通過(guò)內(nèi)容提供程序接口來(lái)訪問(wèn),這讓第三方應(yīng)用程序可以閱讀日程表信息和增加新日程安排。
原文:Working with the Android Calendar 作者:Shane Conder
分享標(biāo)題:Android日程表應(yīng)用整合開(kāi)發(fā)實(shí)例
文章網(wǎng)址:http://www.fisionsoft.com.cn/article/djdipco.html
其他資訊
- 服務(wù)器關(guān)閉服務(wù)器內(nèi)部錯(cuò)誤的解決方法
- 簡(jiǎn)單易懂:如何數(shù)據(jù)庫(kù)截?cái)啾碇械臄?shù)據(jù)(數(shù)據(jù)庫(kù)截?cái)啾碇械膸讉€(gè)數(shù)據(jù))
- 怎樣隱藏自己的IP地址?(美國(guó)的dns地址怎么填?)
- 修改網(wǎng)游數(shù)據(jù)庫(kù),游戲也跟著改!(怎么修改網(wǎng)游的游戲數(shù)據(jù)庫(kù))
- C語(yǔ)言中如何編寫(xiě)SQL數(shù)據(jù)庫(kù)鏈接字符串(csql數(shù)據(jù)庫(kù)鏈接字符串)


咨詢
建站咨詢
