Androidアプリケーションからカレンダーアプリケーションを開きます。オンラインで検索すると、インテントを使用して新しいイベントを作成するだけです。連絡先やギャラリーなどを開くインテントを見つけることができました。
カレンダーを特定の週または日に起動することは可能ですか?できれば、誰かが私を助けてくれませんか。
前もって感謝します。
Intent intent = new Intent(Intent.ACTION_EDIT);
intent.setType("vnd.Android.cursor.item/event");
intent.putExtra("title", "Some title");
intent.putExtra("description", "Some description");
intent.putExtra("beginTime", eventStartInMillis);
intent.putExtra("endTime", eventEndInMillis);
startActivity(intent);
カレンダービューを開くには、次の2つの方法があります。
1)特定の日付別2)特定のイベント別
このためには、次の2つの権限を追加する必要があります
<uses-permission Android:name="Android.permission.READ_CALENDAR" />
<uses-permission Android:name="Android.permission.WRITE_CALENDAR" />
1)特定の日付:
Uri.Builder builder = CalendarContract.CONTENT_URI.buildUpon();
builder.appendPath("time");
ContentUris.appendId(builder, Calendar.getInstance().getTimeInMillis());
Intent intent = new Intent(Intent.ACTION_VIEW)
.setData(builder.build());
startActivity(intent);
2)特定のイベント:
long eventID = 200;
Uri uri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID);
Intent intent = new Intent(Intent.ACTION_VIEW).setData(uri);
startActivity(intent);
注:CalendarContract
コンテンツプロバイダーがAndroid SDKに追加されました。詳しくは、こちらをご覧ください link
Androidソースコードでカレンダーアプリを確認した後、直接呼び出すことができるのはAgendaActivityのみです。他のユーザーは機能しません。他の投稿者がカーソルを直接操作して読み取り/作成できると指摘しているようにイベント、ただしカレンダーアプリをAgendaView以外のビューに呼び出すことはできません。理由は、開発者が次のアクティビティ定義を使用して、Calアプリのマニフェストでその機能を制限しているためです。
<activity Android:name="MonthActivity" Android:label="@string/month_view"
Android:theme="@style/CalendarTheme" />
<activity Android:name="WeekActivity" Android:label="@string/week_view"
Android:theme="@style/CalendarTheme" />
<activity Android:label="@string/day_view" Android:name="DayActivity"
Android:theme="@style/CalendarTheme"/>
<activity Android:name="AgendaActivity" Android:label="@string/agenda_view"
Android:theme="@Android:style/Theme.Light"
Android:exported="true" />
AgendaActivityにのみAndroid:exported = "true"があることに注意してください。他のアクティビティを呼び出そうとすると、許可例外が発生します。
ただし、次のコードを使用して、任意の日にAgendaActivityを呼び出すことができます。
Calendar tempCal = (Calendar) mCalendar.clone();
tempCal.set(year, month, day);
Intent calendarIntent = new Intent() ;
calendarIntent.putExtra("beginTime", tempCal.getTimeInMillis());
calendarIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_SINGLE_TOP);
calendarIntent.setClassName("com.Android.calendar","com.Android.calendar.AgendaActivity");
startActivity(calendarIntent);
インテントを使用してカレンダーデータを表示する
カレンダープロバイダーは、VIEWインテントを使用する2つの異なる方法を提供します。
To open the Calendar to a particular date.
To view an event.
マニフェストに権限を追加する
<uses-permission Android:name="Android.permission.READ_CALENDAR" />
<uses-permission Android:name="Android.permission.WRITE_CALENDAR" />
次に、特定の日付までカレンダーを開く方法を示す例を示します。
// A date-time specified in milliseconds since the Epoch.
long startMillis;
...
Uri.Builder builder = CalendarContract.CONTENT_URI.buildUpon();
builder.appendPath("time");
ContentUris.appendId(builder, startMillis);
Intent intent = new Intent(Intent.ACTION_VIEW)
.setData(builder.build());
startActivity(intent);
表示するイベントを開く方法を示す例を次に示します。
long eventID = 208;
...
Uri uri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID);
Intent intent = new Intent(Intent.ACTION_VIEW)
.setData(uri);
startActivity(intent);
Is it possible to launch the Calendar to a specific week or day?
したがって、今では可能ですが、min API 14
が必要です。
詳細については http://developer.Android.com/guide/topics/providers/calendar-provider.html#intents をご覧ください。
AgendaActivityは「Agenda」ビューをロードします。
私の経験から、ストックAndroidの日、週、月のアクティビティにディープリンクすることはできませんが、最後に開いたビューをロードする「LaunchActivity」を使用できます。
退屈な実験の過程で、私はそれを発見しました:
Intent calendarIntent = new Intent() ;
calendarIntent.setClassName("com.Android.calendar","com.Android.calendar.AgendaActivity");
...カレンダーのアジェンダアクティビティを起動するのに役立ちます。試していませんが、おそらくcom.Android.calendar.DayActivity、.WeekActivity、および.MonthActivityが対応するアクティビティを起動します。