カレンダーアプリを呼び起こす(Intent)


Android4.0(以降ICS)では、Intentで新たにカレンダーアプリを呼び出してスケジュールを追加することができるようになりました。

詳細はイカから。

Intentでカレンダーアプリを呼び起こしてスケジュールを追加するには、IntentにMIME type の ACTION_INSERTをセットして使います。

ACTION_INSERTがセットされたIntentを呼び出すとカレンダーアプリが呼び出されます。

※カレンダーアプリを呼び出す処理にpermissionは必要ありません。

カレンダーアプリを呼び出してスケジュールを追加するために、追加情報として、イカのものを持たせることができます。

追加情報説明
Events.TITLEスケジュールのタイトル
CalendarContract.EXTRA_EVENT_BEGIN_TIMEスケジュールの開始時刻
CalendarContract.EXTRA_EVENT_END_TIMEスケジュールの終了時刻
Events.EVENT_LOCATION スケジュールの場所
Events.DESCRIPTIONスケジュールの詳細内容
Intents.EXTRA_EMAILスケジュールに招待するメールアドレス
Events.ACCESS_LEVELスケジュールのアクセスレベル(プライベートか公開か)
Events.AVAILABILITY他のスケジュールを、設定留守スケジュール期間中に入れられるかの可否

スケジュールの開始時刻と終了時刻であるCalendarContract.EXTRA_EVENT_BEGIN_TIMECalendarContract.EXTRA_EVENT_END_TIMEは、エポックからのミリ秒単位で設定します。

エポックとは、日時を、世界標準時間1970年1月1日午前0時0分0秒からの秒数で表したものです。

サンプルコード

それでは、実際にサンプルアプリを作ってみましょう。

■src/EventIntentSampleActivity

public class EventIntentSampleActivity extends Activity {
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		Button btn = (Button) findViewById(R.id.button1);
		btn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// カレンダーアプリを呼び出すIntentの生成
				Intent intent = new Intent(Intent.ACTION_INSERT, Events.CONTENT_URI);
				//スケジュールのタイトル
				intent.putExtra(Events.TITLE, "タイトル");
				//スケジュールの開始時刻 ゼロで現在時刻
				intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, 0);
				//スケジュールの終了時刻 ゼロで現在時刻+1時間
				intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, 0);
				//スケジュールの場所
				intent.putExtra(Events.EVENT_LOCATION, "大阪");
				//スケジュールの詳細内容
				intent.putExtra(Events.DESCRIPTION, "サンプル");
				//スケジュールに招待するメールアドレス
				intent.putExtra(Intent.EXTRA_EMAIL, "hoge@hoge.com");
				//スケジュールのアクセスレベル
				intent.putExtra(Events.ACCESS_LEVEL, Events.ACCESS_DEFAULT);
				//スケジュールの同時持ちの可否
				intent.putExtra(Events.AVAILABILITY, Events.AVAILABILITY_FREE);
				//Intentを呼び出す
				startActivity(intent);
			}
		});
	}
}

ここで重要なのは、14行目です。
14行目で、カレンダーアプリを呼び出すようにIntentを設定しています。

18行目でスケジュールの開始時刻、20行目で終了時刻を設定しています。
引数をゼロにした場合、開始時刻は現在時刻が設定され、終了時刻は現在時刻+1時間が設定されます。

そして、設計画面です。
今回は、カレンダーアプリを起動する為のIntentを呼び出すボタンのみを設置しました。

■res/main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</LinearLayout>

上記サンプルからIntentを呼び出すと、カレンダーアプリが起動し、スケジュール設定画面へと移ります。