Android日历意图定制

时间:2012-03-11 02:39:05

标签: android android-intent calendar

我正在为程序的另一个区域创建一个后端函数,该区域将向用户的日历添加事件。基本上有人会从GUI中的选项中选择一个事件,我想在日历上设置一个与选择相匹配的事件。 代码使我更清楚我正在使用的是什么:

    java.sql.Timestamp tsStart = java.sql.Timestamp.valueOf(year + "-" + month + "-" + day + " " + startHour + ":" + startMinute + ":00");
    java.sql.Timestamp tsEnd = java.sql.Timestamp.valueOf(year + "-" + month + "-" + day + " " + endHour + ":" + endMinute + ":00");        

    long startTime = tsStart.getTime();
    long endTime = tsEnd.getTime();

    Intent intent = new Intent(Intent.ACTION_EDIT);
    intent.setType("vnd.android.cursor.item/event");        
    intent.putExtra("beginTime", startTime);     
    intent.putExtra("allDay", false);
    intent.putExtra("rrule", "FREQ=WEEKLY;COUNT="+numWeeks);
    intent.putExtra("endTime", endTime);
    intent.putExtra("title", title);
    intent.putExtra("description", description);
    intent.putExtra("eventLocation", location);
    startActivity(intent);

我一直在使用意图去做这件事,但有一些额外的东西,我宁愿没有: 1.当intent启动时,它将从What字段的文本条目开始。我已经自动填充了所有这些字段,因此用户不需要做任何事情,当它像这样启动时,键盘会占用大量空间并且看起来很乱。有什么方法可以将焦点设置为不在文本框中或伪造后退按钮按下? 2.是否有可能使意图的某些部分不显示?我不认为有必要问时区,不需要全天检查(因为我告诉它开始和结束时间),不需要客人,宁可隐藏重复,因为它是定制的,可能会混淆最终用户要看,我不想要提醒,它会自动生成一个10分钟。 - >是否可以隐藏任何/所有这些项目? 3.甚至可以让它永远不会显示给用户吗?我喜欢这样一个事实:它允许用户选择使用哪个日历,但我很好用它们的默认设置,因为大多数人将他们的手机与其他帐户联系起来,电话日历是我的主要关注点。如果我可以让10分钟的提醒消失,我只是让它永远不会显示给用户并让它只是填充他们的日历,因为我告诉它。

感谢任何可以提供帮助的人。我一直在阅读意图,日历,以及我在Android开发者处想到的任何事情,而且我已经找到了一块我找不到这些答案的墙。这让我想起,有没有列出所有有效putExtra的列表? Android Developers页面很适合列出所有方法等,但除了找到一些例子之外,我不知道我能把所有内容作为有效参数放在putExtra中。

1 个答案:

答案 0 :(得分:6)

当您向日历发送添加活动的意图时,您将重新启动日历活动。意图只是向系统发出的信息;任何可以处理意图的活动都可以自由地说出来#34;如果多个活动的意图过滤器与意图匹配,则用户会看到消除歧义"消除歧义"屏幕,允许他或她选择要使用的应用程序。在大多数Intent的情况下,它是确定显示哪些应用程序的MIME类型。如果需要,您可以编写自己的活动来处理事件。活动的意图过滤器必须与日历相匹配,我不建议这样做,因为您已经签署了自己处理尝试向日历添加内容的每个意图!

您可以选择向Calendar Provider(实际是Calendar应用程序,它访问提供程序)发送intent,或者使用ContentResolver API和Calendar Provider自行插入数据。

您可能会考虑后一种做法,并提供自己的用户界面而不是使用日历活动,但我建议您在添加定期事件时要谨慎,因为正确使用它们很棘手。通常,开发人员应使用Calendar活动来允许用户添加事件。

如果您使用Intent启动日历"插入事件"活动,您无法控制其UI。为方便起见,Calendar活动将使用您发送的Extras填充UI。如果您没有发送额外信息,活动将使用默认值填充该字段,或将其留空。我不确定它确实如此,但这是标准做法。

开发人员在开发应用时经常会忽略Developer 指南。看一眼 http://developer.android.com/guide/topics/providers/calendar-provider.html#intents,详细描述了日历提供程序。此页面列出了所有可用的Extras,告诉您如何使用ContentResolver()进程插入事件,并详细说明如何使用Intents。

目前,我并不认为应用程序有一种标准方式可以公开其处理的Intents结构,但是对于设备中出现的内置应用程序或捆绑应用程序,你总是可以在这里询问更多信息。请记住,某些应用与平台捆绑在一起,但其他应用(例如Google地图)则是独立的。他们可能有公共意图/ API,但您需要知道他们可能无法用于特定用户的设备。