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

如何使用Intent(Froyo)启动Android日历应用程序,android,calendar,android-intent,Android,Calendar,Android Intent,我想从android应用程序打开日历应用程序。当我在网上搜索时,我得到的只是使用intent创建新事件。我可以找到打开联系人和画廊等的意向 是否可以将日历启动到特定的一周或一天?如果可能的话,有人能帮我一下吗 提前感谢。通过一个乏味的实验过程,我发现: Intent intent = new Intent(Intent.ACTION_EDIT); intent.setType("vnd.android.cursor.item/event"); intent.putExtra("title",

我想从android应用程序打开日历应用程序。当我在网上搜索时,我得到的只是使用intent创建新事件。我可以找到打开联系人和画廊等的意向

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


提前感谢。

通过一个乏味的实验过程,我发现:

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);
Intent calendarIntent=newintent()
calendarIntent.setClassName(“com.android.calendar”、“com.android.calendar.AgendaActivity”)

…为我启动日历的议程活动而工作。没有 尝试过,但可能是com.android.calendar.DayActivity, .WeekActivity和.MonthActivity将启动相应的 活动。

代理活动加载“议程”视图


根据我的经验,你不能深入链接到股票Android中的日、周和月活动,但是你可以使用“LaunchActivity”加载上次打开的视图。

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

使用意图查看日历数据

日历提供程序提供了两种不同的方式来使用视图意图:

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" />
以下示例显示了如何打开事件进行查看:

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

    startActivity(intent);

是否可以将日历启动到特定的一周或一天?

因此,现在这是可能的,但需要
min API 14


有关详细信息,请访问

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

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

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

  <uses-permission android:name="android.permission.READ_CALENDAR" />
  <uses-permission android:name="android.permission.WRITE_CALENDAR" />
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.content.ActivityNotFoundException:找不到可处理意图的活动{act=android.Intent.action.EDIT typ=vnd.android.cursor.item/event(has extras)}…你能给出一个解决方案吗?@TijoKVarghese:确保你在Android手机上运行或调试你的应用程序,而不是在模拟器上。我听说Android日历没有默认打包到emulator映像中。好的。我会用实际设备检查一下。到目前为止,我只在Android emulator上进行了测试。我尝试过,但它给了我一个权限被拒绝的例外。这在API=>14上非常有效。你知道视图意图是否可以处理除“时间”之外的其他参数吗?例如,是否打开一个时间段(周、月)?
  <uses-permission android:name="android.permission.READ_CALENDAR" />
  <uses-permission android:name="android.permission.WRITE_CALENDAR" />
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);
long eventID = 200;

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