我想从Android应用程序打开日历应用程序。当我在线搜索时,我得到的只是使用意图创建新事件。我可以找到Intents来打开Contacts和Gallery等。
是否可以将日历启动到特定的一周或一天?如果可能的话,有人可以帮我解决。
提前致谢。
答案 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将相应推出 活动。