2014年7月5日土曜日

Android Wear: The developer's perspective



■ 全体の感想

Android Wear でよく使うであろう、Notification と、Data API, Message API(Node API については簡単な紹介のみ)について実際のアプリを例に紹介している。
最初に出てきた画像が、他のセッションにも出てきてたのでなんか笑ってしまった。

■ 内容の要約

今年の初めに Developer Preview を開始し、ここでは Notification を Wear に表示することができ。
今回、これに加え、新しい機能が追加された。
新しい SDK では、データを送ったり、カスタムUIを作ったり、音声入力を処理したりできるようになった。



Wear に対応した runtastic アプリ、 PHILIPS の hue アプリ(ライトの色などをWearから変更するアプリ)、glympse(social location service)アプリが会場に展示されている。

1つのapk(Side control apk)が Phone 用の apk と Wear 用の apk を持つようにビルドする。



主に3つのAPIがある。

- Data API
- Message API
- Node API


Node API は Node がコネクションに接続されたり、接続が外れたりしたことを検知するのに便利。
Wearではこれを使って、Phone と接続がきれたときは Wear 上にアイコンを表示している。



Message API はローレイテンシーなメカニズムで、バイト配列を送受信できる。



Data API はデバイス間で同期するデータを store に置くことができる。
(例えば、Phoneから発行される通常のNotificationなど、これを使っている)




子犬のスライドショーアプリで解説:

GoogleApiClientの作成がエントリーポイント



■ 流れその1:Phoneでアプリを起動すると、Wearの通知がでる

スマホアプリ
1. DataApi.putDataItem() で Data Item を送る

Wearアプリ
2. WearableListenerService を継承した Service で Data Item を受信する
3. Notifiication を発行する(スマホには通知されない)


- Data Item を送る(Phone → Wearable)

PutDataMapRequest に / から始まるパスを指定しする(最終的には wear:///... になる)
送りたいデータは、Bundle のような key-value ペアとして DataMap にセットする

DataApi.putDataItem() で store に送る
接続されている全ての Node で同期される




- Data Item を受信する(Wearable)

WearableListenerService には次のコールバックリスナーインタフェースが実装されている。
- NodeListener
- MessageListener
- DataListener

WearableListenerService を継承した Service を使って、受信する。
Data Item を受信したときは、DataListener の onDataChanged() が呼ばれる。





■ 流れその2:Wearの通知で、Phoneのスライドの位置を変える

Wearアプリ
1. Message を Data Item を送ってきた Node に送る

スマホアプリ
2. Message を受信する


- Message を送る(Wearable → Phone)

通知から PendingIntent で WearableListenerService を継承したサービスを開始するコードになっている。
NodeId には流れその1 で受信した Data Item の持ち主を保持しておいて利用するようになっている。
Data Item から NodeId を取り出すには、パスを見ればよい。

MessageApi.sendMessage() を使う。
指定した NodeId にだけ送られる。




- Message を受信する(Phone)

Messag を受信すると、MessageListener の onMessageReceived() が呼ばれる。





■ 流れその3: Wearableでアプリを表示する

android:keepScreenOn="true" を指定すると、画面がタイムアウトしない。



ただし、これはバッテリーにとても影響するので、自分でタイムアウト期間を設けて、その時間ユーザーからのインタラクションがないときは、Activityを終了するようにする。
また、ユーザーの状況に応じて Activity を終了する。例えば、このアプリなら Phone 側でアプリが終了したら、Wearableの通知を削除したり、アプリも終了させるなど。

WakeLock も注意が必要。Wearable の小さいバッテリーには影響が大きい。

Wearableのアプリは左から右にスワイプして消すことができるが、ViewPager とは操作がかぶるので意図せずアプリを終了することがあるかもしれない。
Wearアプリのテーマで android:windowSwipeToDismiss="false" を指定すれば、スワイプで消せなくなる。



Wearの上に手のひらをかざせばホームスクリーンに変わるが、あまりエレガントではない。
画面を長押しすると、アプリを終了する画面を表示する DismissOverlayView が用意されている



画像などのデータは Asset を使って Data Item に入れて送る。
画像は小さい画面に適したサイズにしてから送ること。





■ Q and A

Q: Wearable との接続に Google Play Service を使っているということは、Kindle とかのデバイスでは使えない?
A: Play Store が入っている、Android 4.3 以上のデバイスが対応デバイスです。

Q: Custom Activity を画面に置いたままで自動的にデバイスをタイムアウトさせることができますか?また、wakelock がリリースされたときにホームスクリーンに戻ることはできますか?
A: 30秒でホーム画面にタイムアウトします。

Q: ということは、アプリを置いたままにする方法はない?(この後、質問者の意味がよくわからない)
A: そういうときには、Notification を使うべきでしょう。

Q: このプレゼンでは、Wearableをリモートコントロールとして使っていましたが、ジャイロスコープなどのセンサーはどうやって使いますか?
A: Wearable は Android で動いています。使いたいセンサーのセンサーリスナーを登録します。

Q: どうやって、アプリからアプリへ切り替えますか?どこでアプリの一覧を見ることができますか?
A: UI は post-grid 用にデザインされています。意図的にアプリケーションの一覧をなくしています。開発者には、適切なときに stream にカード(Wearableでの通知のこと)を出したり、音声アクションを登録することを推奨します。"OK Google, start app name"と言うこともできます。

Q: プレセットのボイスコマンドがあるのですか?それとも自分でボイスコマンドを定義できるのですか?
A: ボイスコマンドはプラットフォームの一部です。developer.android.com に方法が書いてあります。ボインスコマンドを拡張する提案もウェルカムです。

Q: Google Glass 向けのアプリを作るときは、別々に作らないといけないですか?
A: 今、Google Glass チームと Wear チームは一緒に活動しており、Google が出しているすべての Wearable で一貫した API がいずれ出せると思います。

Q: Android TV や Android Auto に Wearable が接続することはなにか考えていますか?
A: Glass と同じように通知は Android Auto にも機能します。他の Wearable チームと密接に活動しているので将来なにかあるかもしれません。

Q: 画面のオンオフと検知できますか?
A: できます。

Q: Wearで電話アプリをつくりたいのですが...
A: スピーカーがないので、話せますが、聞けません。

Q: Wear が近くにあるかどうかに応じて処理をすることはできますか?
A: Wear と Phone は Bluetooth で接続されているので、その状態でわかります。



0 件のコメント:

コメントを投稿