こんにちは、ATLでウェアラブルデバイスの研究をしている吉村です。今回は前回に引き続き、Androidで組み立てたプロトタイプをGoogle Glass実機へポーティングします。

エントリポイントの作成

これまでActivityを使用していたエントリポイントをServiceへ移動します。

Activityを削除し、Serviceから直接LiveCardの挿入/削除を行なうようにします。

src/main/java/com/gmail/altakey/myapplication/TimerService.java:


今度はLiveCardで表示するようになるのでActivityへBroadcastを飛ばしていたところをTimerCardの直接操作へ書き換えます。


最後にTimerServiceをAndroidManifest.xmlへ登録します。

src/main/AndroidManifest.xml:


タイムラインへの表示

先程さっさと使ってしまいましたがTimerViewで表示していたところをLiveCard化し、TimerCardとして切り出しておきましょう。

src/main/java/com/gmail/altakey/myapplication/TimerCard.java:


どうですか?TimerCardの実装とTimerViewの実装、似ていませんか?

TimerViewは削除します。

メニューの作成

Google Glassの場合、メニューを呼び出した際に下のActivityの動作を停止する必要があります。このようなことをするために、透明Activityを間に一枚入れてそこからオプションメニューを呼び出してやります。オプションメニューで良いんです。あとはGlassが標準の形で出してくれます。

src/main/java/com/gmail/altakey/myapplication/TimerMenuActivity.java:


こちらの定義もAndroidManifest.xmlへ加えておきましょう。

src/main/AndroidManifest.xml:


スタイルの定義はこんな感じに。

src/main/res/values/styles.xml:


ボイスコマンドの指定

あとはVoiceTrigger系のものをTimerServiceでハンドリングします。ここでは「START A WORKOUT」を使用します。

src/main/java/com/gmail/altakey/myapplication/TimerService.java:


voice.xmlにも指定します。

src/main/res/xml/voice.xml:


AndroidManifest.xmlにも指定します。

src/main/AndroidManifest.xml:


音の調整

GlassのMUSICチャンネルはヘッドフォン端子に向いているためそのままでは音が出ません。これでは困るので、NOTIFICATIONチャンネル(骨伝導トランスデューサ)を使うようにします。人に聞こえにくいという特徴を持つ骨伝導ですが、周波数が高いとかなり音漏れを起こします。クリック音が漏れると非常に耳障りなのでこちらの再生レートも落としてしまいましょう。カチッ、ではなくゴリッ、とした音になりますが格段に音漏れを低減することができます。

src/main/java/com/gmail/altakey/myapplication/TimerService.java:


完成!

ここまで来たらビルドして実機でテストしてみましょう。「Ok glass, start a workout」と言うとGlasswareが立ち上がりカウントダウンを始めたでしょうか。タップするとカウントダウンが一時停止してメニューが開いたでしょうか。そこからExitで終了できるでしょうか。

まとめ

以上、長かったですが簡単なポモドーロタイマーを作成してみました。環境構築から普通のAndroidでプロトタイピングして最後に一気にポーティングという進め方をして来ましたが、この方法はGlassが手元にない場合や触れる時間が少ない場合などにきっと役に立つのではないかと思います。ではまた。