如何使用Calendar Intent?

时间:2011-07-07 21:13:03

标签: android android-intent

我正在尝试从我的应用中启动日历,因此我可以让用户将约会放到它上面,然后让我的应用阅读这些日历。

我尝试了我在这里找到的代码:

ComponentName cn; 
Intent i = new Intent();         
cn = new ComponentName("com.google.android.calendar", "com.android.calendar.LaunchActivity");
i.setComponent(cn);
startActivity(i);

并获得错误

07-07 21:05:33.944: ERROR/AndroidRuntime(1089):
    Caused by: android.content.ActivityNotFoundException: Unable to find explicit
    activity class {com.google.android.calendar/com.android.calendar.LaunchActivity};
    have you declared this activity in your AndroidManifest.xml?

我确实将com.android.calendar.LaunchActivity声明为我的Android清单文件,但它仍无效...

我认为使用模拟器不可行吗?我在Android 3.0(HoneyComb)中这样做。

7 个答案:

答案 0 :(得分:12)

这来自Andriod docs,对我有用:

long startMillis = System.currentTimeMillis();
Uri.Builder builder = CalendarContract.CONTENT_URI.buildUpon();
builder.appendPath("time");
ContentUris.appendId(builder, startMillis);
intent = new Intent(Intent.ACTION_VIEW).setData(builder.build());
startActivity(intent);

更多信息: Android calendar docs

答案 1 :(得分:3)

首先,它无法在模拟器中运行,因为您尝试使用的日历应用程序不在模拟器图像中。

其次,此应用程序可能在也可能不在任何生产设备上。使用Intent创建ComponentName的任何人(指向其他人的组件)都会在最好的情况下提出麻烦。

第三,即使用户确实选择添加活动,您也无法立即“让我的应用程序读取这些内容”。它们仅在同步后通过Google Calendar GData API提供,这可能不会立即生效。

答案 2 :(得分:2)

在没有指定日期的情况下打开Goog​​le日历的最简单方法:

Uri calendarUri = CalendarContract.CONTENT_URI
            .buildUpon()
            .appendPath("time")
            .build();
startActivity(new Intent(Intent.ACTION_VIEW, calendarUri));

答案 3 :(得分:1)

你必须写这个

setContentView(R.layout.tabla);
    ComponentName cn; 
    Intent i = new Intent();         
    cn = new ComponentName("com.android.calendar", "com.android.calendar.LaunchActivity");
    i.setComponent(cn);
    startActivity(i);   

答案 4 :(得分:0)

您需要授予应用程序阅读日历的权限。尝试将此添加到AndroidManifest.xml

<uses-permission android:name="android.permission.READ_CALENDAR"></uses-permission>

答案 5 :(得分:0)

如果您使用的是API 14或更高版本,则可以使用此代码

Intent intent = new Intent(Intent.ACTION_INSERT);
intent.setData(CalendarContract.Events.CONTENT_URI);
startActivity(intent)

答案 6 :(得分:0)

apb的答案翻译成MonoDroid是

long startMillis = Java.Lang.JavaSystem.CurrentTimeMillis( );

Uri.Builder builder = Android.Provider.CalendarContract.ContentUri.BuildUpon( );
builder.AppendPath( "time" );

ContentUris.AppendId( builder,startMillis );

Intent intent = new Intent( Intent.ActionView );
intent.SetData( builder.Build() );

StartActivity( intent );