ゼロから始めるSmartWatch向けアプリ開発 概念編

2014/2/14 15860hit

GoogleGlassを始めとしたWearable端末が話題になっていますが、今のとこ一番現実的なのはスマートウォッチ。
大小様々なメーカーからスマートウォッチが発売されていますがSONYのSmartWatch2はその完成度から他社の一歩先を言っているように感じます。
SmartWatch2自体のレビューについてはSONY スマートウォッチ2の人柱になったを見て下さい。
まだ、キャズムを超えるに至っていないスマートウォッチですが、使ってみると流行る一歩手前の空気感がしています。
いつ爆発的なヒットになってもおかしくないというのが使ってみての印象です。
そしてこのSmartWatch2、実は自作アプリを使うことが出来ます。
(デバイスの種類としてのスマートウォッチはカタカナでスマートウォッチ、商品名であるSONYのSmartWatchはアルファベットでSmartWatchと記述します。)

目次

概念編
環境構築編
HelloWorld編

ちょっと宣伝

私もアプリを一つ作ってみました。
SmartWatchを使ってスマートフォンを探すアプリです。 携帯を鞄の中に入れた時に、本当に携帯を入れたか自信がないとか、携帯を部屋の中どこにおいたかわからなくなった時にSmartWatch側からスマートフォンの着信音を鳴らすことが出来ます。
SmartWatch(MN2)、SmartWatch2(SW2)、そしてワイヤレスヘッドセットのMW1に対応しています。
Google Playでダウンロード詳しくは紹介動画を作ったのでぜひ見て下さい。
スマートフォンとSmartWatchは同じ部屋ならわりと離れていても繋がっているので結構使い勝手がいいです。開発の動機は自分で使いたかったからです。


アプリを作った感想

開発してみるとかなり情報が少ないのが悩みでした。一番揃っているのが公式SONYのSony Add-on SDK Developer Worldですが英語ですし、中身も複数のPDFやHTMLに分散していて、実装の話が少なく本当につくろうと思ったらサンプルコードを解析していくしかなかったというのが正直な印象。
サンプルコードも全てを網羅しているわけではないし、その割にごちゃごちゃしていて見やすいとは言いがたくせっかくの数少ない日本メーカーが牽引している市場なのだからもっと盛り上げていきたいのに勿体ないです。

そこで、今後のためにSmartWatchのアプリ開発方法を連載で紹介したいと思います。
今回は第一回目として割と知られていないSmartWatchアプリがどのように動くのかの概念を紹介します。

SmartWatch2が優れている5つの理由

他社のスマートウォッチと比べてSONYのSmartWatch2が優れていると思うのは以下のとおりです。

安い

GalaxyGearは36,540円ですがSmartWatch2はその半額以下の14,800円。
フルカラーのタッチパネルを備えて独自アプリが動くスマートウォッチとしては圧倒的に安いです。
成長の早い製品においては価格が安いことは大事です。

軽くてコンパクト

重量はGalaxyGearの82g(auサイトより)に比べて23.5gと1/3以下
サイズもコンパクトでより普通の時計に近いサイズです。
特に厚みが9mmしかないので洋服などに引っかかって邪魔になりません。

低発熱

発熱は全く気になりません。
普通の腕時計と同様に発熱していると言う感覚が全くありません。

長時間バッテリー

腕時計と思うとそれほど持たないですが、他社のSmartWatchがせいぜい1日程度しかバッテリーが持たないのに対してSmartWatch2はかなり多用しても3日程度は持ちます。
おかげで一晩充電し忘れても猶予があります。
充電は専用ケーブルではなく普通のMicroUSBで可能です。バッテリーが小さいおかげで充電時間も早い。

防水防塵

ちゃんと防水防塵に対応しています。腕時計なんて濡れて当たり前。
雨が降ったり手を洗う度に外さないといけないなんてことがありません。

で、上記の結果どうなるかというと、
普段使いをしていてストレスを感じることがとても少ないのです。つけている感じがしない軽さで、発熱もしない。多少乱雑に扱っても大丈夫。
そのため、ずっと違和感なく付け続けることができます。
私は普通の腕時計でも重たいと感じてしまったり、MacBook Airのパームレストとぶつかってガリガリ音がするのが嫌でつい外してしまうことが多かったのですがSmartWatch2に関してはつけていることを忘れるほど自然で、一日中つけっぱなしということが殆どです。
スマートウォッチで重要なのは、この「いつでもすぐに見ることが出来る事」ではないでしょうか。
圧倒的距離の近さこそがスマートフォンに勝るスマートウォッチ最大の魅力といえます。

ではなぜSONYだけがこのような圧倒的に安く、小型で、バッテリーが持ち、防水防塵で低発熱な端末を出すことが出来たのでしょうか
その秘密がSmartWatchアプリが動く仕組みにあります。

SmartWatchにまつわる誤解

SmartWatch2をつけていると良くこう聞かれます。

「それ、Androidが入っているやつだよね?」

入っていません。

タッチパネルだったり戻る、ホーム、メニューのボタンや通知の表示方法などAndroidを意識して作られたUIではありますが、SmartWatchはSONYが独自開発したOSが動いていてAndroidは動いていません。

「ということはAndroidアプリは動かないの?」

動きません。

SmartWatch2をPCとUSB接続してもadbは反応せずにただ充電を始めるだけです。
もちろんアプリのインストール先として選ぶことも出来ません。

「ってことは独自の開発方法が必要なの? もしかしてC?」

Androidアプリを使って動かします。

Androidアプリは動かないけど、Androidアプリで動かすというとまるで謎解きのようですが、つまり仕組みはこういうこと

SmartWatchアプリが動く仕組み

SmartWatchのアプリはAndroidが搭載されたスマートフォン上で動作します。
図式するとこんな感じ

SmartWatchアプリはSmartWatchではなくスマートフォンにインストールします。
スマートフォンはその情報を元にSmartWatchにアイコンを設置するように指示します。
SmartWatch上でアプリが起動されたり、タップされたりするとスマートフォン上のAndroidアプリが呼び出されます。スマートフォン上でそのイベントを処理して結果の画像を生成し、SmartWatchに描画データを送ります。

すなわちSmartWatchは画面付きコントローラーといった状態で、シンクライアントのような動作をしています。
SmartWatchはスマートフォンとの接続が切れている間は殆どの機能が使えなくなります。
※標準で内蔵されているアラームやキャッシュ上のデータを見るだけの処理など一部のアプリは除きますが原則はこの作りです。

この作りのお陰でSmartWatch上には高額で熱くバッテリー食いの高速なCPUを載せる必要がなく、安価で小型なのに電池が長持ちで発熱しないというわけです。
スマートウォッチはスマートフォンを置き換えるものではなく、スマートフォンと同時に使ってサポートするものという設計思想に基づいた理にかなった作りをしているように思います。


SmartWatchアプリを動かす者達 SmartWatch Architecture

スマートフォンにインストールされるSmartWatchアプリは通常のアプリではなくスマートコネクトのプラグインとして動きます。
ここまで便宜上SmartWatchアプリと記載してきましたが、正式にはSmart Extensionと言います。(以降Smart Extensionと記載します)
SmartWatch Architectureの中心となる存在がスマートコネクトです。
スマートコネクトはSONYが開発したアプリで様々な周辺機器や状況に応じて処理を行うハブの役割を果たしています。
スマートコネクトがSmartWatchなどのハードウェアやSmart Extensionを管理します。
Host Applicationと呼ばれるアプリはハードウェアと直接やり取りを行います。
Host Applicationは周辺機器ごとに用意されハードウェアとAPIの中継を行っています。
SmartWatch2の場合SmartWatch 2 SW2というHost ApplicationがGooglePlayに公開されています。
Smart Extensionは私達が実装する部分で、スマートコネクトやHost Applicationを経由してSmartWatchとやりとりを行います。

Smart Extension内の概要

ここからが実装の話になります。
SmartWatchアプリを作るには最低限以下の4つのクラスが必要となります。
通常のAndroidアプリはActivityクラスが一つあればいいのに比べてずいぶんと複雑であるように見えますが、殆ど定形処理を行うだけなのでわかってしまえば面倒ではあるけれど難しくはありません。

BroadcastReceiver

SmartWatch上でのイベントはHostApplicationからIntentとして送られてくるのでそれを受け取るためのBroadcastReceiverです。
Intentを受け取りServiceに投げるだけの処理となります。

ExtensionService

Serviceクラスを継承したSmartWatch特有の機能が付与されたServiceです。
SmartExtensionはこのServiceとして動作することになります。
AndroidでServiceというとActivityとの連携など難易度が高い印象がありますが、SmartExtensionの場合はライフサイクルの面倒をスマートコネクトが見てくれるので、Activityと連携せずに動かすことが出来てそんなに難しくはありません。
ExtensionService内では使用するRegistrationInformationやControlExtensionの生成などを行います。

RegistrationInformation

アプリ名やアイコン、対応する画面サイズなどアプリの情報や動作に必要なAPIなどを記載します。
通常のAndroidアプリにおけるAndroidmanifestのような存在です。
この情報を元にスマートコネクトやHostApplicationはアプリとハードウェアを関連付けます。

ControlExtension

SmartWatchとやりとりを行うクラスです。
処理の実装は主にここに書いていきます。

全体の流れ

インストール時

Smart Extensionをインストールする時はHostApplicationより飛んできたIntentをBroadcastReceiverが受けExtensionServiceを起動します。
ExtensionServiceはgetRegistrationInformation()の中でアプリの起動条件などを記載したRegistrationInformationを生成し返します。
スマートコネクトはRegistrationInformationの情報を元に関連させるHost Applicationを選択し登録します。

操作時

SmartWatch上で操作を行った時はタッチイベントなどの情報がIntentで飛ばされます。
BroadcastReceiverが受けExtensionServiceを起動します。
操作の内容によってonTouchやonKeyが呼ばれshowBitmapなどのメソッドを使い処理結果を返します。

開発を行うまではイメージがつきづらく難しく見えるかもしれませんが、BroadcastReceiver、ExtensionService、RegistrationInformationはほぼ定形の処理を記載するだけになるので、実際に作ってみるとそれほど難しくない事がわかるかと思います。

次回に向けて

今回は概念の話が多く、イマイチ具体的なイメージが付きづらかったかと思います。
次回からは開発環境を構築してSmartExtensionを作っていく方法を辿っていきます。

前:本当は教えたくない 先輩に質問するただ一つのテクニック 次:すべりやすいのタイヤ痕を本気で反証してみる

関連キーワード

[Android][Java][モバイル][IT][ウェアラブル]

コメント

名前:Y|投稿日:2014/12/09 01:37

はじめまして.
これからSmartWatch2のアプリ開発を行おうとしているのですが,通常のAndroidアプリと連携したアプリを制作することは可能なのでしょうか.
たとえば,Nexus 7であるメッセージを入力するとSmartWatchに表示されるようなアプリの場合,仕組みはどういう形式をとることになるのでしょうか.
ご教示いただけますと幸いです.

どうぞよろしくお願いいたします.

名前:kenz|投稿日:2014/12/15 17:16

Yさん 可能ですよ
上記で言うExtensionServiceは結局のところServiceですのでActivity側からIntentやAIDLで呼び出すことが可能です。

名前:管制塔|投稿日:2016/10/12 13:33

初めまして
外れた質問かもしれませんが
iphone7でsw2を動かせませんか?

名前:Kenz|投稿日:2016/10/12 16:59

少なくとも 通常の方法では動かせません。
何かしら裏技はあるかもしれませんが、当方では把握していないです。

コメントを投稿する

名前URI
コメント