如何使用Intent(Froyo)启动Android日历应用程序

我想从Android应用程序打开日历应用程序。 当我在线搜索时,我得到的就是使用意图创建新事件。 我可以findIntents来打开Contacts和Gallery等。

是否可以将日历启动到特定的一周或一天? 如果可能的话,有人可以帮助我。

提前致谢。

Intent intent = new Intent(Intent.ACTION_EDIT); intent.setType("vnd.android.cursor.item/event"); intent.putExtra("title", "Some title"); intent.putExtra("description", "Some description"); intent.putExtra("beginTime", eventStartInMillis); intent.putExtra("endTime", eventEndInMillis); startActivity(intent); 

您可以通过两种方式打开日历视图:

1)特定日期2)特定事件

为此,您必须添加以下两个权限

    

1)按特定日期:

 Uri.Builder builder = CalendarContract.CONTENT_URI.buildUpon(); builder.appendPath("time"); ContentUris.appendId(builder, Calendar.getInstance().getTimeInMillis()); Intent intent = new Intent(Intent.ACTION_VIEW) .setData(builder.build()); startActivity(intent); 

2)特定事件:

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

注意: CalendarContract内容提供程序已添加到API级别14的Android SDK中。有关详细信息,请访问此链接

在Android源代码中查看日历应用程序后,您只能直接调用AgendaActivity。 其他人不会工作。 正如其他海报所述,您可以直接与光标进行交互以读取/创建事件,但您无法将日历应用程序调用到除AgendaView之外的视图。 原因是开发人员通过使用以下活动定义限制了Cal应用程序清单中的这种能力:

      

请注意,只有AgendaActivity有android:exported =“true”。 如果您尝试调用其他活动,则会获得权限exception。

但是,您可以使用以下代码将AgendaActivity调用到任意日期:

  Calendar tempCal = (Calendar) mCalendar.clone(); tempCal.set(year, month, day); Intent calendarIntent = new Intent() ; calendarIntent.putExtra("beginTime", tempCal.getTimeInMillis()); calendarIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_SINGLE_TOP); calendarIntent.setClassName("com.android.calendar","com.android.calendar.AgendaActivity"); startActivity(calendarIntent); 

使用意图查看日历数据

Calender Provider提供了两种使用VIEW Intent的方法:

 To open the Calendar to a particular date. To view an event. 

添加对清单的权限

   

以下示例显示如何将日历打开到特定日期:

  // A date-time specified in milliseconds since the epoch. long startMillis; ... Uri.Builder builder = CalendarContract.CONTENT_URI.buildUpon(); builder.appendPath("time"); ContentUris.appendId(builder, startMillis); Intent intent = new Intent(Intent.ACTION_VIEW) .setData(builder.build()); startActivity(intent); 

以下示例显示如何打开要查看的事件:

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

Is it possible to launch the Calendar to a specific week or day?

所以,现在有可能,但需要min API 14

有关详细信息,请访问http://developer.android.com/guide/topics/providers/calendar-provider.html#intents

AgendaActivity加载“议程”视图。

根据我的经验,您无法深入链接到Android中的日,周和月活动,但您可以使用“LaunchActivity”加载上次打开的视图。

通过繁琐的实验过程,我发现:

Intent calendarIntent = new Intent() ;
calendarIntent.setClassName("com.android.calendar","com.android.calendar.AgendaActivity");

…适用于我启动日历的议程活动。 没试过,但也许com.android.calendar.DayActivity,.WeekActivity和.MonthActivity会启动相应的活动。