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_TIMEとCalendarContract.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>