夢と魔法の待ち時間をAndroidWear対応した!
夢と魔法の待ち時間というAndroidアプリを趣味で開発しています。このアプリをAndroidWearに対応させました!Google Playよりダウンロードできます。
通知
Android電話やタブレットに届いた通知は、自動で接続しているAndroidWear端末(例えば時計)にも通知されます。Android4.1で追加されたBigTextStyle
とかInboxStyle
を適用した通知はWearでいい感じに表示されます。さらにWear用のAPIが追加されたので、これを使ってみました。
NotificationCompat.WearableExtender
のインスタンスを作って、それをNotificationCompat.Builder#extend
に渡すだけで通知にWear固有の設定ができるようになります。今回のリリースでは通知の背景画像の設定と、ページの追加をしています。
だいたいこんなコードを書きました。
private NotificationCompat.WearableExtender wearableExtender( final List<Attraction> attractions, final Bitmap attractionImage) { return new NotificationCompat.WearableExtender() // 背景画像の設定 .setBackground(attractionImage) // ページの追加 (各アトラクション) .addPages(Lists.transform(attractions, new Function<Attraction, Notification>() { @Override public Notification apply(final Attraction attraction) { // 1つのNotificationが1つのページに対応する return new NotificationCompat.Builder(context) .setContentTitle(attraction.getName()) .setContentText(attraction.getWaitTime() + "分待ち") .build(); } })); }
Wearアプリ
Wear側にインストールするアプリにも対応しています。Wear側でアトラクションの待ち時間一覧を表示できて便利です。
電話(or タブレット)とWear間のデータ送受信
アトラクション情報(JSON)を電話側でダウンロードして、Attraction
クラスのオブジェクトにデシリアライズしています。それをbyte
配列にシリアライズしてWearに送信。Wearはbyte
配列を受信し、Attraction
オブジェクトにデシリアライズする、こんな感じになってます。
メッセージの送信には、Wearable.MessageApi#sendMessage
を使用します。その引数の1つとして「パス」を指定する必要があります。このパスにより受信側でどんなメッセージが送られて来たか識別できるわけです。例えば"/land/attractions"
とか"/sea/attractions"
みたいな風に指定します。
Wear側での受信には、今回はMessageApi.MessageListener
をアクティビティで実装してメッセージをリスンする形にしました。実装すべきメソッドのシグネチャはpublic void onMessageReceived(MessageEvent)
で、このMessageEvent
でメッセージのパスや内容(byte
配列)が取れます。
@Override public void onMessageReceived(final MessageEvent messageEvent) { final String path = messageEvent.getPath(); final byte[] data = messageEvent.getData();
こういう感じでパスとメッセージ内容を取れて
final Optional<List<Attraction>> attractions = ByteUtils.deserialize(data);
Wear用ビュー
Wear用のビューもいくつか用意されています。とりあえず今回は待ち時間情報をリスト表示したかったのでWearableListView
を使ってみました。使い方は普通のListView
とほとんど同じだと思います。setAdapter
でアダプタを渡す必要がありますが、WearableListView用のWearableListView.Adapter
を使います。このAdapter
はいわゆるViewHolderを管理してくれるみたいなのですごく使いやすいです。
apk配布
Wearアプリは電話(or タブレット)アプリにバンドルして配布するらしいです。電話にアプリをインストールするとシステムが自動でWear側にアプリをインストールしてくれます。Wearにアプリがインストールされていれば「Start ランドの待ち時間」、「Start シーの待ち時間」みたいにしゃべるとアプリが起動し、待ち時間一覧が表示されます。ぜひ夢と魔法の待ち時間を使ってパークを楽しんでください!!
届いた! (7/7追記)
届いたので早速使ってみた!いい感じ!これがあれば快適に遊べるはずです。
*1:ByteUtils#deserializeは自分で実装したやつ