gpt4 book ai didi

android - 从日历打开 Android 应用程序

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:00:42 25 4
gpt4 key购买 nike

我正在开发的应用程序需要能够在选定的日历中创建事件,然后当用户在他们的日历查看应用程序中查看这些事件时,它会提供一个选项以返回到我的应用程序以查看有关它的更多信息以及与之相关的数据。

使用 Calendar Provider 我能够创建事件并将 Uri 存储到事件中以供以后使用/删除,但我还没有找到在日历查看应用程序中从这些事件打开我的应用程序的好方法。

我考虑过的 2 个选项是在事件描述中包含一个自定义 URL,单击该 URL 时将被我应用程序中的 Intent 过滤器捕获(例如 myapp://event/1000),或者我可以设置 CUSTOM_APP_PACKAGE and CUSTOM_APP_URI 值创建事件时来自 CalendarContract。

我对第一个选项的问题是我认为我不能保证日历查看应用程序会正确地将我的自定义 URL 视为链接并让用户点击它(在我的 Google 日历中不起作用药片)。第二个选项看起来更有希望,但我找不到太多解释如何使用它的文档。

有谁知道如何正确地做到这一点?感谢您的帮助!

最佳答案

如果可以接受以 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 的一部分(如 the documentation 解释的那样)将从日历应用调用以显示详细 View 的 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 将在点击出现的按钮时启动,并将传递一个带有操作 "android.provider.calendar.action.HANDLE_CUSTOM_EVENT" 的 Intent 及其URI 将是日历项 URI。

您提供的自定义 URI 位于附加项中,键为 CalendarContract.EXTRA_CUSTOM_APP_URI

@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
String myCustomUri = getIntent().getStringExtra(CalendarContract.EXTRA_CUSTOM_APP_URI);

...
}

如果您想查看日历应用构建此 Intent 的代码,请参阅 EventInfoFragment.java 中的 EventInfoFragment.updateCustomAppButton() .

关于android - 从日历打开 Android 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15919165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com