Android日历意图定制

Android日历意图定制,android,android-intent,calendar,Android,Android Intent,Calendar,我正在为程序的另一个区域制作一个后端函数,它将向用户的日历中添加事件。基本上,有人会从GUI中的选项中选择一个事件,我想在日历上设置一个与该选项匹配的事件。 使我的工作更加清晰的代码: java.sql.Timestamp tsStart = java.sql.Timestamp.valueOf(year + "-" + month + "-" + day + " " + startHour + ":" + startMinute + ":00"); java.sql.Times

我正在为程序的另一个区域制作一个后端函数,它将向用户的日历中添加事件。基本上,有人会从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);
我一直在使用intent来做这件事,但有一些额外的东西我不想做: 1.当intent启动时,它在What字段的文本条目中启动。我已经自动填充了所有这些字段,所以用户不需要做任何事情,当它像这样启动时,键盘会占用很多空间,看起来很凌乱。有什么方法可以设置焦点不在文本框中,或者假装按下后退按钮? 2.是否有可能使意向书的某些部分不显示?我不认为有必要询问时区,不需要全天检查,因为我告诉它开始和结束时间,不需要客人,宁愿隐藏重复,因为它是定制的,可能会让最终用户看不清楚,我不想要提醒,它会自动在10分钟内发出提醒。 ->是否可以隐藏任何/所有这些项目? 3.有没有可能让它永远不会显示给用户?我喜欢这样一个事实,即它允许用户选择使用哪种日历,但我对它使用默认设置没意见,因为大多数人都会将手机与其他帐户链接,而手机日历是我的主要关注点。如果我能让10分钟的提醒消失,我会让它永远不会显示给用户,让它按照我的指示填充他们的日历


感谢任何能给予帮助的人。我一直在读安卓开发者的意向书、日历和我能想到的任何东西,我碰到了一堵墙,我找不到这些答案。这提醒了我,有没有列出所有有效的putExtra?Android开发者页面很适合列出所有的方法等,但是除了找到一些例子之外,我不知道我能在putExtra中放入哪些有效参数。

当你发送一个意向,想在日历中添加一个事件时,你就启动了日历活动。意图只是向系统发出的一条信息;任何能够处理意图的活动都可以自由地说出来。如果多个活动的意图过滤器与该意图匹配,用户将看到一个消歧屏幕,该屏幕允许用户选择要使用的应用程序。在大多数情况下,MIME类型决定显示哪些应用程序。如果需要,您可以编写自己的活动来处理事件。活动的意图过滤器必须与日历相匹配,我不建议您这样做,因为您正在注册以处理每个试图向日历添加内容的意图

您可以选择向日历提供程序(实际上是日历应用程序)发送意图,日历应用程序将访问该提供程序,或者使用ContentResolver API与日历提供程序一起插入数据

你可以考虑后一种方法,并且提供你自己的UI,而不是使用日历活动,但是我建议你在添加循环事件时要谨慎,因为正确的处理是很难的。通常,开发人员应该使用日历活动来允许用户添加事件

如果使用意图启动“日历插入事件”活动,则无法控制其UI。为了方便起见,日历活动将使用您发送的附加内容填充UI。如果不发送额外的,活动将使用默认值填充该字段或将其保留为空。我不确定是否有,但这是标准做法

开发人员在开发应用程序时经常忽略开发人员指南。看看 ,它详细描述了日历提供程序。此页面列出了所有可用的附加内容,告诉您如何使用ContentResolver进程插入事件,并详细介绍如何使用意图


目前,我不认为有一种标准的方法可以让应用程序公开它所处理的意图的结构,但是对于出现在设备上的内置或捆绑应用程序,你可以在这里询问更多信息。请记住,有些应用程序与平台捆绑在一起,但谷歌地图等其他应用程序是独立的。它们可能具有公共意图/API,但您需要注意,它们可能不适用于特定用户的设备。

当您发送向日历添加事件的意图时,您正在启动日历活动。意图只是向系统发出的一条信息;任何能够处理意图的活动都可以自由地说出来。如果多个活动的意图过滤器与该意图匹配,用户将看到一个消歧屏幕,该屏幕允许用户选择要使用的应用程序。在大多数情况下,MIME类型决定显示哪些应用程序。您可以编写自己的活动来处理事件, 如果你愿意的话。活动的意图过滤器必须与日历相匹配,我不建议您这样做,因为您正在注册以处理每个试图向日历添加内容的意图

您可以选择向日历提供程序(实际上是日历应用程序)发送意图,日历应用程序将访问该提供程序,或者使用ContentResolver API与日历提供程序一起插入数据

你可以考虑后一种方法,并且提供你自己的UI,而不是使用日历活动,但是我建议你在添加循环事件时要谨慎,因为正确的处理是很难的。通常,开发人员应该使用日历活动来允许用户添加事件

如果使用意图启动“日历插入事件”活动,则无法控制其UI。为了方便起见,日历活动将使用您发送的附加内容填充UI。如果不发送额外的,活动将使用默认值填充该字段或将其保留为空。我不确定是否有,但这是标准做法

开发人员在开发应用程序时经常忽略开发人员指南。看看 ,它详细描述了日历提供程序。此页面列出了所有可用的附加内容,告诉您如何使用ContentResolver进程插入事件,并详细介绍如何使用意图


目前,我不认为有一种标准的方法可以让应用程序公开它所处理的意图的结构,但是对于出现在设备上的内置或捆绑应用程序,你可以在这里询问更多信息。请记住,有些应用程序与平台捆绑在一起,但谷歌地图等其他应用程序是独立的。它们可能具有公共意图/API,但您需要注意,它们可能不适用于特定用户的设备。

感谢您的澄清。现在它变得更有意义了。我想,因为我一直在阅读关于意图的内容,同时试图找出如何写入日历,所以我只是对日历的意图有一种隧道式的看法,而不是真正思考意图是什么。这确实解释了为什么日历事件会以这种方式弹出,而且除了尝试ContentResolver和日历提供程序之外,我可能无法对其进行任何更改,我将在下一步进行研究。谢谢。公平地说,谷歌的文档并不总是让查找变得如此容易。感谢您提供日历提供商意向的链接-我已经搜索了很长时间。感谢您的澄清。现在它变得更有意义了。我想,因为我一直在阅读关于意图的内容,同时试图找出如何写入日历,所以我只是对日历的意图有一种隧道式的看法,而不是真正思考意图是什么。这确实解释了为什么日历事件会以这种方式弹出,而且除了尝试ContentResolver和日历提供程序之外,我可能无法对其进行任何更改,我将在下一步进行研究。谢谢。公平地说,谷歌的文档并不总是让查找变得如此容易。感谢您提供日历提供商意图的链接-我已经搜索了很长时间了。