2012-03-21 53 views
3

我做了這個代碼:如何使用意圖查看日曆數據?

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

我確信事件ID是正確的,並在視圖事件標題顯示是正確的。

問題是事件時間不正確,如:1970-1-1 8:00。

爲什麼?任何人都可以幫忙謝謝。

+0

嘗試查詢日曆數據庫,這可能會給出一些洞察其原因。 – JoxTraex 2012-03-21 05:21:21

+0

已嘗試查詢,但時間的數據是正確的。 – 2012-03-21 05:55:57

+0

您可以發佈您如何閱讀日曆內容的代碼? – JoxTraex 2012-03-21 05:56:47

回答

4

您必須添加事件&結束時間開始的意圖的額外數據:

intent.putExtra("beginTime", beginMilliTS); 
intent.putExtra("endTime", endMilliTS); 

我通過使用從值「開始」和「結束」事件實例的領域得到了這個工作。 這應該也適用於事件中的「dtstart」和「dtend」字段。

+0

+1這個偉大的答案。但是,當試圖查看重複發生的事件時,此代碼似乎崩潰。你知道解決這個問題的方法嗎? – 2012-11-23 15:50:28

+1

永遠不要看到崩潰。要編輯reccuring事件,您必須獲取與其關聯的真實事件。使用背景數據塊,而不是事件數據庫;然後使用event_id,begin,end(這些是背景數據塊中的字段名稱)來設置意圖。 – GeH 2012-11-24 07:12:05

+0

非常感謝。如果你願意,在這裏提交你的答案,我會接受它:http:// stackoverflow。com/questions/13532549/android-calendar-recurring-events-have-wrong-end-date-time – 2012-11-24 18:07:48

1

在Android 4.2.2上,似乎仍然有同樣的問題。這是正確的行爲,還是一些缺少的東西?

  1. 通過Instances.query(Globals.sContext.getContentResolver(),proj,begin,end)獲取事件ID; proj = String [] {Instances.EVENT_ID,Instances.BEGIN,Instances.END ...};

  2. 使用偶數編號查看日曆應用中的事件。

試圖與代碼(來自http://developer.android.com/guide/topics/providers/calendar-provider.html)時,它仍然顯示在由「意圖」打開「詳細視圖」 1969年12月31日;並在日曆的「詳細信息視圖」中單擊該事件時在「編輯事件」窗體中顯示當前日期。

...

Uri uri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID); 

Intent intent = new Intent(Intent.ACTION_VIEW) 

    .setData(uri); 

startActivity(intent); 

,仍然不與連工作:

intent.putExtra("beginTime", from); 
intent.putExtra("endTime", till); //'from', 'till' is the mills got from the Instances.BEGIN/END fields from the query 

編輯: 下面的代碼工作。唯一不同的是使用定義CalendarContract.EXTRA_EVENT_BEGIN_TIME

Uri uri = ContentUris.withAppendedId(Events.CONTENT_URI, eventId); 
Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setData(uri); 
intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, from); 
intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, till); 
startActivity(intent);