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

我想从android应用程序打开日历应用程序。 当我在网上search,所有我得到的是使用意图创build新的事件。 我可以find意图打开联系人和画廊等

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

提前致谢。

Solutions Collecting From Web of "如何使用Intent(Froyo)启动Android日历应用程序"

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)特定date2)特定事件

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

  <uses-permission android:name="android.permission.READ_CALENDAR" /> <uses-permission android:name="android.permission.WRITE_CALENDAR" /> 

1)特定date:

 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。 其他人将无法工作。 正如其他海报已经注意到,您可以直接与光标进行交互来读取/创build事件,但是您不能将日历应用程序调用到除AgendaView以外的视图。 原因是开发人员通过使用以下活动定义限制了Cal应用程序的清单中的这种能力:

  <activity android:name="MonthActivity" android:label="@string/month_view" android:theme="@style/CalendarTheme" /> <activity android:name="WeekActivity" android:label="@string/week_view" android:theme="@style/CalendarTheme" /> <activity android:label="@string/day_view" android:name="DayActivity" android:theme="@style/CalendarTheme"/> <activity android:name="AgendaActivity" android:label="@string/agenda_view" android:theme="@android:style/Theme.Light" android:exported="true" /> 

请注意,只有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); 

使用意图查看日历数据

日历提供者提供两种不同的方式来使用VIEW Intent:

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

添加清单的权限

 <uses-permission android:name="android.permission.READ_CALENDAR" /> <uses-permission android:name="android.permission.WRITE_CALENDAR" /> 

这里是一个例子,显示如何打开日历到一个特定的date:

  // 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将启动相应的活动。