カレンダーアプリを呼び起こす(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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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

1
2
3
4
5
6
7
8
9
10
11
12
13
<?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を呼び出すと、カレンダーアプリが起動し、スケジュール設定画面へと移ります。