如果可以接受以 Jelly Bean (API 16+) 为目标,那么使用CUSTOM_APP_PACKAGE
是最好的解决方案。添加新日历事件时,您只需填写CUSTOM_APP_PACKAGE
和CUSTOM_APP_URI
字段(分别使用您的包名称和标识事件的 URI):
ContentValues values = new ContentValues();
values.put(CalendarContract.Events.CALENDAR_ID, 1);
values.put(CalendarContract.Events.TITLE, "Check stackoverflow.com");
values.put(CalendarContract.Events.DTSTART, beginTime.getTimeInMillis());
values.put(CalendarContract.Events.DTEND, endTime.getTimeInMillis());
values.put(CalendarContract.Events.EVENT_TIMEZONE, TimeZone.getDefault().getID());
values.put(CalendarContract.Events.CUSTOM_APP_PACKAGE, getPackageName());
values.put(CalendarContract.Events.CUSTOM_APP_URI, "myAppointment://1");
getContentResolver().insert(CalendarContract.Events.CONTENT_URI, values);
然后,您需要指定作为 AndroidManifest.xml 的一部分(如文档所述)将从日历应用程序调用的 Activity 以显示详细视图,例如
<activity android:name=".ShowCalendarDetailActivity">
<intent-filter>
<action android:name="android.provider.calendar.action.HANDLE_CUSTOM_EVENT" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.item/event" />
</intent-filter>
</activity>
ShowCalendarDetailActivity
将在点击出现的按钮时启动,并将传递一个带有操作的 Intent,"android.provider.calendar.action.HANDLE_CUSTOM_EVENT"
其 URI 将是日历项 URI。
您提供的自定义 URI 在 extras 中,带有 key CalendarContract.EXTRA_CUSTOM_APP_URI
。
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
String myCustomUri = getIntent().getStringExtra(CalendarContract.EXTRA_CUSTOM_APP_URI);
...
}
如果您想查看日历应用程序构建此意图的代码,请参阅EventInfoFragment.updateCustomAppButton()
.EventInfoFragment.java