守则
我已在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()?
我相信在这种情况下,我必须将日历权限添加到应用程序,但用户将无法选择保存事件的日历。
任何帮助将不胜感激!
答案 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作为参数传递给此函数。