从Android中的另一个应用程序打开默认日历应用程序

opening default calendar application from another app in android

我正在尝试从android中的应用程序打开默认日历应用程序。我确实获得了与此相关的一些链接

1
2
3
4
5
6
  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);

这确实打开了日历。但是,我希望日历应用程序在月份模式下打开(显示月份中的天数列表)。我需要这方面的帮助。

预先感谢:)


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

1
2
3
4
5
6
7
8
9
 <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"。如果尝试调用其他活动,则将获得权限异常。


首先,您应该使用Calendar Provider定义的日历意图。这将使它成为将来的证明,因为硬编码要启动的活动的类并不是一个好主意。除此之外,它在设备之间可能会有所不同。

这些的完整文档可以在这里找到。

不幸的是,当您使用Intent.ACTION_VIEW仅查看日历时,这些似乎不允许设置特定的查看模式。