如何在我的应用程序中打开日历?

3
我正在为Android构建一个应用程序,我不需要我的应用程序包含日历(这样做也没有意义),我的应用程序允许用户收听广播电台,并需要设置事件(在特定时间记得收听广播)。如果应用程序有自己的日历,那么只有当用户打开应用程序时,事件警报才会响起...毫无意义。我一直在寻找,但找不到,是否有一种方法可以使用意图或其他方式打开谷歌日历或Android可能拥有的其他日历? 我需要将我的意图(/其他代码)放入已经存在的侦听器中,现在看起来像这样
private View.OnClickListener reminder = new View.OnClickListener() {

        @Override
        public void onClick(View v) {
                  // open calendar code goes here.

            }
};

我不需要应用程序在日历中预先填充任何字段,只需打开它,剩下的交给用户处理。

欢迎提供任何帮助,谢谢。

1个回答

9

如果您只想打开日历,可以使用下列任何一个组件名称的意图(如果您希望支持旧手机,则可能需要为这两个组件名称都进行适配)。

Intent i = new Intent();

//Froyo or greater (mind you I just tested this on CM7 and the less than froyo one worked so it depends on the phone...)
cn = new ComponentName("com.google.android.calendar", "com.android.calendar.LaunchActivity");

//less than Froyo
cn = new ComponentName("com.android.calendar", "com.android.calendar.LaunchActivity");

i.setComponent(cn);
startActivity(i);

如果您想要进入添加事件屏幕(这对您来说更好),可以使用以下方式:
 //all version of android
 Intent i = new Intent();

 // mimeType will popup the chooser any  for any implementing application (e.g. the built in calendar or applications such as "Business calendar"
 i.setType("vnd.android.cursor.item/event"); 

 // the time the event should start in millis. This example uses now as the start time and ends in 1 hour
 i.putExtra("beginTime", new Date().getTime()); 
 i.putExtra("endTime", new Date().getTime() + DateUtils.HOUR_IN_MILLIS);

 // the action
 i.setAction(Intent.ACTION_EDIT);
 startActivity(i);

(代码未经测试,从现有项目中复制)

我该如何在运行时使用这个 ComponentName?或者说,我应该如何处理我新建的 ComponentName? - kyle
这两个都不是特别安全的。第二个更接近一些,因为设备支持该 MIME 类型的机会更大。但是,在 Android 操作系统中没有日历应用程序。某些设备上可能没有日历应用程序,如果有一个,它可能不是 com.android.calendar。此外,核心 Android 团队欢迎重构他们的应用程序并打破这段代码,正如这里已经存在的两个可能的“意图”所证明的那样。 - CommonsWare
据我所知,模拟器没有日历应用程序,因此它将无法找到该应用程序(根据CommonsWare的评论),并且会崩溃。@CommonsWare 是的,是的,是的,但是我不知道有更好的打开日历应用程序的方法,否则我会使用它 :) - roflharrison
@Sam:那就不要打开日历应用程序,找到其他解决方案来解决你的问题。 - CommonsWare
谢谢你的帮助,我打算只使用闹钟来设置提醒,现在先走简单路线,我学到了很多,再次感谢。 - kyle
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接