今見返してみるとAndroid Wearアプリを作ったのはほぼ1年前になる。流石にどうやってWearとスマホを通信させるかとかうろ覚えなので、公式のトレーニングと前に作った自分のコードを見ながらリハビリをしているところ。

1年ちかく期間が開いているため、私が開発していた当時とはAndroid Wearの仕様が変わっている部分があるっぽい。

例えば通信を行う際に、以前は通信を受け取るサービスにintent-filterで<action android:name="com.google.android.gms.wearable.BIND_LISTENER" />を登録するだけだったのが、今は各APIごとに分割して指定するようになったようだ。

http://android-developers.blogspot.jp/2016/04/deprecation-of-bindlistener.html

Android Wearとスマホ間でデータをやり取りする方法は、大別するとData APIを使う方法、Message APIを使う方法の2つ。トレーニングではAssetが別立てで出ているけど、AssetはData APIを使った通信方法で、ただデータの取り出し方が違うってだけ(という認識でいる)。

Data APIによる通信はonDataChangedメソッドで受け取り、Message APIによる通信はonMessageReceivedメソッドで受け取る。

Data APIを使った通信方法については、当時とそんなに変わっていないみたい。Serviceを使ってデータを受け取る際に、intent-filterにBIND_LISTENERではなくDATA_CHANGEDを設定するようになったくらいの認識でいいのだろうか。

Message APIによる通信はちょっと注意が必要。Message APIによる通信を行う際は、データを誰に送るのかノードを指定する必要がある。ここがちょっと変わっている。

以前はAndroid Wearとスマホは常に1:1の関係だったので、つながっているノードを取得→自分じゃないノード=相手という感じでよかったのだが、今は1つのスマホに複数のAndroid Wearデバイスを接続することが出来るように仕様変更されている。だからどのノードにメッセージを送信するか、ノードを指定する部分がややこしくなってしまっている。ちなみに今詰まっているのはここ。

Capability APIなるものを使って、メッセージを受信できる相手を探す→そこから物理的に一番近いノードを取得するという感じで処理するようになるらしい。この部分は当時にはなかったところなので何かとややこしい。

ご意見はこちらまで