2012-03-21 32 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);