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

时间:2010-12-07 03:16:58

标签: android calendar android-intent

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

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

提前致谢。

6 个答案:

答案 0 :(得分:19)

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 :(得分:9)

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

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

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

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

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中。有关详细信息,请访问此link

答案 2 :(得分:3)

在Android源代码中查看日历应用程序后,您只能直接调用AgendaActivity。其他人不会工作。正如其他海报所述,您可以直接与光标进行交互以读取/创建事件,但您无法将日历应用程序调用到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”。如果您尝试调用其他活动,则会获得权限异常。

但是,您可以使用以下代码将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);

答案 3 :(得分:3)

使用意图查看日历数据

日历提供程序提供了两种使用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" />

以下是一个示例,说明如何将日历打开到特定日期:

 // 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

答案 4 :(得分:1)

AgendaActivity加载“议程”视图。

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

答案 5 :(得分:0)

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

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

...让我启动日历的议程活动。没有 试过,但也许是com.android.calendar.DayActivity,  .WeekActivity和.MonthActivity将相应推出 活动。