Android版でしか利用できない機能として、端末内蔵のカレンダーにアクセスする機能がTitaniumには実装されています。AndroidのカレンダーはGoogleアカウントのカレンダーと連動しており、Androidのカレンダーに変更を加えるとWeb上のGoogleカレンダーも同時に変更されるようになっています。GoogleカレンダーもAPIを持っていますが、Titaniumでは認証部分をAndroidに任せることでカレンダーへの操作を簡単に実装できます。
カレンダーの取得
Googleカレンダーには、一人のアカウントで複数のカレンダーが含まれています。“会社用”とか“プライベート”といった分け方もあり得ますし、第三者が作成したカレンダーをインポートしておくことで、“日本の祝日・休日”というカレンダーを持っている場合もあります。そこで、まずは自分のアカウントに存在するカレンダーを取得し、そこに指定されているイベントの一覧を表示してみます。
これだけでAndroid端末と紐づいてるGoogleアカウントのカレンダー名の一覧が表示できます。Ti.Android.Calendar.allCalendarsでカレンダーをすべて取得しているほかは、特に変わったコードはありません。取得できるカレンダーオブジェクトについては、name以外のパラメタも取得できますのでAPIリファレンスを参照してください。そしてカレンダーの中に含まれるイベントをすべて表示する部分が、rowオブジェクトのクリックイベントのイベントリスナに登録されている無名関数です。Windowとして開かれるevent_list.jsは次のようになっています。
こちらのコードもカレンダーの表示と似ていますが、カレンダーの取得にかわってcalendar.getEventsInYearで年内のすべてのイベントを取得するようにしています。このメソッドで取得できるイベントオブジェクトには、イベントの開始時間、終了時間などが含まれており、この情報も新しくWindowを開いて表示するようにしています。
イベントの詳細を表示する部分は次のようになります。
アラームの有無などイベントに設定されている値は多岐に渡るのですが、今回はイベントのタイトル、概要、開始時間、終了時間のみを取得しています。取得部分はdetailsという配列を生成している部分になります。
イベントの追加
カレンダーを指定して、イベントを追加することもできます。
イベント一覧を表示していたevent_list.jsの末尾にこのようなコードを加えます。これで、menuボタンを押すとAddEventというメニューが現れるので新たにイベントを生成することができます。入力欄の表示を省略していますので、testというイベントが現在時間を起点に作成されます。実機でテストしたあとは、GoogleカレンダーをWeb上で確認するとイベントが追加されていることがわかります。
Reminderの設定
イベントにはReminderを設定することができます。Reminderを設定しておくと指定時間にSMS、E-mail、Alertでイベントが近づいていることをユーザーにお知らせすることができます。
作成したイベントオブジェクトからさらにcreateRemindeメソッドを呼ぶことでReminderがセットできます。
この例だと、10分前に、メールでイベントが通知されます。通知方法を設定するmethodパラメタに設定する値はTi.Android.Calendarオブジェクトの定数で定義されています。
まとめ
今回はAndroidのカレンダーに対する操作について解説しました。サンプルで扱ったコードはgithubにありますのであわせてご覧ください。Android特有の機能はほぼ解説し終わったので、次回以降はFacebookやYQLなどの外部サービス呼び出しなど、今までの記事で解説しきれなかった便利な機能について解説していきたいと考えています。