日历意图和三星Galaxy SII

时间:2013-09-17 01:48:02

标签: android android-intent android-4.0-ice-cream-sandwich android-calendar

守则

我已在Android应用程序上实现了Calendar Intent,如下所示:

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.content.ActivityNotFoundException 似乎会在某些设备上产生问题。

现在,此代码在我测试过的设备上运行确定。其中包括摩托罗拉Defy +配备Android 4.1.2自定义ROM和三星Galaxy SIII Mini配备Android 4.1.2。

但据我所知,在搭载Android 4.0.4的三星Galaxy SII上,应用程序崩溃了。特别是错误:

{{1}}

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


问题

正如我在the official developer guide上看到的那样,三星和日历提供商存在某种问题。有没有办法在这款手机上使用Calendar Intents?或者我将不得不使用getContentResolver()?

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

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分: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;
}

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