3

我正在尝试做 3 件事。根据首选项中的选择,我想打开已安装的日历应用程序,在已安装的日历中显示事件详细信息或使用所需的已安装日历应用程序创建新事件。用户应该能够通过 android 框架的决策对话框来决定使用哪个应用程序。

出于测试目的,除了股票谷歌日历应用程序之外,我还安装了 aCalendar 和 Jorte。目前只有“创建新事件”列出了所有 3 个应用程序来执行此操作。

Intent intent = null;
intent = new Intent(Intent.ACTION_EDIT);
intent.setType("vnd.android.cursor.item/event");

使用该操作仅打开日历或日历详细信息时,选择对话框中仅显示日历和谷歌日历。两者都工作正常。

这是我用来创建意图的完整方法:

private Intent createCalendarIntent()
{
    long startMillis = System.currentTimeMillis();
    Uri.Builder builder = CalendarContract.CONTENT_URI.buildUpon();
    builder.appendPath("time");
    ContentUris.appendId(builder, startMillis);
    Intent intent = null;

    Uri uri = ContentUris.withAppendedId(Events.CONTENT_URI, 
                                         calHandle.getEventID(0));          

    switch(getPreferenceIntentAction())
    {
        case 1: intent = new Intent(Intent.ACTION_VIEW);
                            intent.setType("vnd.android.cursor.item/event");
                            intent.setData(builder.build());
            break;
        case 2: intent = new Intent(Intent.ACTION_VIEW);
                            intent.setType("vnd.android.cursor.item/event");
                            intent.setData(uri);
            break;
        case 3: intent = new Intent(Intent.ACTION_EDIT);
                            intent.setType("vnd.android.cursor.item/event");
            break;
            default:
                break;
    }

其中案例 1 只是在实际一周打开日历,案例 2 是显示事件详细信息,案例 3 是创建一个新事件。

我不知道为什么 Jorte 没有出现。我认为这也会发生在其他日历应用程序上。

如何在不读取设备上所有已安装的应用程序并过滤日历应用程序的情况下也显示 op Jorte(以及其他应用程序),让用户在偏好设置中但在内置对话框中做出决定。

提前致谢!

4

1 回答 1

1

我不知道为什么 Jorte 没有出现。

因为它是一个日历应用程序,而不是 Google 日历前端。您的其他两个Intent配置只能由CalendarContract用于存储其事件的应用程序来支持。Jorte 可能不会,因为它的 Play 商店描述表明“它可以与 Google 日历同步”(强调我的),这表明它不会一直将其事件存储在 Google 日历中。不要求所有日历应用程序都将其数据存储在CalendarContract.

我认为这也会发生在其他日历应用程序上。

任何使用自己的数据存储的日历应用程序都应该按照 Jorte 的方式运行。

怎么可能也展示op Jorte(以及其他人)

根据定义,您不可能让任意日历应用程序支持您的第二个Intent配置。这是为了查看特定的 Google 日历条目,并不是每个日历应用程序都会将其事件存储在 Google 日历中。

于 2013-09-15T17:10:35.440 回答