0

编码

我在 Android 应用程序上实现了日历意图,如下所示:

Intent intent = new Intent(Intent.ACTION_EDIT);
intent.setData(Events.CONTENT_URI);
intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, parsedStartTime.toMillis(false))
intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, parsedEndTime.toMillis(false))
intent.putExtra(Events.TITLE, eventInfo.getName())
intent.putExtra(Events.DESCRIPTION, eventInfo.getText())
intent.putExtra(Events.EVENT_LOCATION, eventInfo.getWhere())
intent.putExtra(Events.AVAILABILITY, Events.AVAILABILITY_BUSY);
startActivity(intent);

问题

我用过ACTION_EDIT,因为ACTION_INSERT官方开发者指南中的内容似乎在某些设备上会产生问题。

现在,这段代码在我测试过的设备上运行良好。其中包括带有 Android 4.1.2 自定义 rom 的 Motorola Defy+ 和来自三星的带有 Android 4.1.2 的三星 Galaxy SIII Mini。

但我有报告称,在搭载 Android 4.0.4 的三星 Galaxy SII 上,该应用程序崩溃了。特别是错误:

android.content.ActivityNotFoundException

可悲的是,这是我得到的所有信息,因为我无法访问手机本身(它来自用户)。我收到了来自 Analytics 的错误。


问题

正如我在这篇文章中看到的那样,三星和日历提供商存在某种问题。有没有办法在这款手机上使用日历意图?或者我将不得不使用 getContentResolver()?

我相信在这种情况下,我必须将日历权限添加到应用程序,但用户将无法选择保存事件的日历。

任何帮助,将不胜感激!

4

1 回答 1

1

好的,所以我发现了问题:客户端没有安装任何日历应用程序来处理日历意图。我不认为这是可能的。

在这种情况下,选项将是添加测试以检查是否有可以处理意图的应用程序。

要检查意图是否可用,我们可以使用:

public static boolean isAvailable(Context ctx, Intent intent) {
        final PackageManager mgr = ctx.getPackageManager();
        List<ResolveInfo> list = mgr.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
        return list.size() > 0;
}

并将意图作为参数传递给此函数。

于 2013-10-07T17:09:52.127 回答