我正在尝试从我的应用中启动日历,因此我可以让用户将约会放到它上面,然后让我的应用阅读这些日历。
我尝试了我在这里找到的代码:
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)中这样做。
答案 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)
在没有指定日期的情况下打开Google日历的最简单方法:
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 );