アプリからGoogleカレンダーに登録されている情報を読み込んだり、追加したい場合がある。
そんな時、 Androidならとても簡単にそれらを行うことが出来る。
何せ、GoogleカレンダーもAndroidもどちらもGoogleが作ったものだ。 

それではカレンダーの操作をどうやればいいか見ていこう。
 
カレンダーの参照
まず最初にGoogleカレンダーの参照から始めてみよう。
アプリからカレンダーの操作を行うためにはAndroidManifest.xmlに以下のパーミッションを設定する必要がある。

これでアプリからカレンダーを操作できるようになる。

では実際にカレンダーを参照するコードを見てみよう。

1.カレンダーへのアクセスはContentResolverを使用するので、最初に取得する。

2.欲しい情報をリストアップする。
 取得できる情報は色々あるが、とりあえず_ID, ACCOUNT_NAME, ACCOUNT_TYPEはイベントの操作を行う際に必要になるので特に重要だ。

3.情報の取得に関してはDBの操作とほとんど変わらないので、わかりやすいだろう。

これを実行すると以下のような結果が得られる。
1:docomo
docomo
com.android.nttdocomo
-----------------------------------
2:[自分のGMAILアドレス]
[自分のGMAILアドレス]
com.google
-----------------------------------
3:日本の祝日
[自分のGMAILアドレス]
com.google
-----------------------------------
4:誕生日
[自分のGMAILアドレス]
com.google
-----------------------------------
興味深いことに1つ目のカレンダーにはドコモのものが入っている。
これはドコモ端末に最初からインストールされている「スケジュール」という名前のアプリのためのカレンダーだ。

また、3番目と4番目は特殊なカレンダーで、ユーザからは変更できない。
projectionにCALENDAR_ACCESS_LEVELを加えると、この2つが他のカレンダーと違うことがわかるだろう。

さて、ここでACCOUNT_TYPEを見ておこう。
ドコモのカレンダー以外は全てcom.googleとなっている。
これはGoogleカレンダーと同期しているものであるということだ。
PCでGoogleカレンダーを見てみたら、これらのカレンダーが存在することがわかるだろう。

ところで、アプリでカレンダー情報を取得する場合、祝日や誕生日は不要な場合が多いだろう。
そのような際は、以下のように条件を付与してカレンダーを取得すれば良い。

これで実行すると以下のような結果が得られる。
1:docomo
docomo
com.android.nttdocomo
-----------------------------------
2:[自分のGMAILアドレス]
[自分のGMAILアドレス]
com.google
-----------------------------------
さらに、自分のGoogleカレンダーのみを取得するようにしてみよう。
条件を以下のように変える。

これで実行すると以下のような結果が得られる。
2:[自分のGMAILアドレス]
[自分のGMAILアドレス]
com.google
-----------------------------------
次回は新しいカレンダーを作成する方法を見ていくことにする。

参考文献
ソフトウェア技術ドキュメントを勝手に翻訳

関連記事
[Android] Googleカレンダーと連携する(2) カレンダーの追加
[Android] Googleカレンダーと連携する(3) イベントの操作