Google

2016年10月19日水曜日

WESTUNITIS社のInfoLinkerを弄った件

以前、WestUnitis社のInfoLinkerというウェアラブルデバイスを触る機会がありました。
その時、デバイス上で動くネイティブアプリを開発してみたのですが、開発に関する細かいあれこれを書いておきます。
個人的な備忘録なので余り役に立たないかも知れません。

まずこちらが公式ページ。
萌えっ子が描かれるホームページ
現在3モデルがあり、私が借りたのはWUZ-01Aというタイプ。



公式のスペックにある通りこの小ささでAndroid4.4.2を内蔵しており、要はAndroidアプリを開発できればカスタマイズも可能という事になります。
なので、開発そのものはさほど困難ではありません。

そしてベースとなるAndroidプロジェクトは上記公式サイトから取得できます。
特殊デバイスという事で画面サイズや押せるボタン等の設定が気になるところですが、サンプルにそれらが収まっており、拡張して作ればこの辺りも特に難しくはありません。

グーグルグラス亡き今、現状ではここまでの小型デバイスは余り見当たらず、機能としては十分過ぎて褒める事が多いので、開発等で大変だったり面倒だった点を敢えて列挙してみます。

1.デバッグ中の本体操作が厳しい

この実機はメガネにセットして使うのですが、操作ボタンは本体の下側に3個並んでいます。自分から見えない右耳のそばをポチポチ押すのはどうしても難しいかと。
そもそもウェアラブルデバイスなので画面も触れない点はどうしようもありません。

じゃあデバッグツール上でならどうにか、、、と思ったところ、このツールは専用の操作アプリが存在しました。
ツール自体は公式が公開しているのでそのSSをアップしてみます。

真ん中の枠と文字は私が入れたものです。
設定画面を出したりホームに戻るボタンがあるのは便利です。
逆を返すと、ウェアラブルデバイスの宿命上、こういったツールが無ければ操作も厳しいという事になります。そもそも画面を触れないですし。
キャプチャ画像は一定タイミングで更新され、図にある通りマウスイベントを拾って実機に渡してくれるというのが良いところ。

しかし開発者であった私は、この狭い画面上でマウスを使ってAndroidの設定画面等をフリック操作しなければなりません。画面表示にはラグもあるので結構厳し目です。
横画面状態でキーボードなどが出るとこれもまた画面が狭くて大変でした。
また、USBでキーボードを繋がずにテストしていたので、文字入力はかなり面倒でした。

2.機能が幾つかオミットされている

小ささゆえに当然でもあるのですが、このAndroidは標準からカスタマイズされ、無駄と思われるものは削除され、必要なものが追加されているようでした。


メモリ等の問題もありますし、無いなら無いでそれはいいのですが、開発時に1番困ったのがお客様に要求されたAndroid標準の音声認識機能がなかった事。

ちなみに確認方法は簡単で、adb のシェルから、

 pm list package

を実行し、com.google.android.voicesearchが存在するかどうかを確認するだけ。

サードパーティライブラリを入れるか標準機能を戻して使うか、正直迷いました。
公式にサポートしてもらう事も考えましたが、WestUnitisさんに仕事を依頼しているわけでもない関係上サポートしてくれる訳がないので最終的に自力で解決策も含め探す事にしました。

そして、開発期間が短かった事もあるので標準機能を使う事に決定。
このオミットされた機能を元に戻る必要があります。
また、工場出荷状態以外の調整は当然ながらサポート外となりますのでご注意を。

2-1.音声認識機能の独自追加

Androidは海外で小型デバイスにインストールされる事が多く、その際この実機同様に機能をオミットするケースがあります。
となると、それらのオミットされた機能を戻したいという方もいらっしゃる訳で、情報集めをして機能を戻す事にしてみました。
まずこの実機OSは4.4.2という事は判明しており、更にAndroidはいくつかの拡張機能をapkとして外部に分割して構成しています。
音声認識もご多分に漏れず、外部apkとして存在しているわけです。

なので、4.4.2のソースコードから音声認識機能部分を取り出しコンパイル。
出来上がったapkのMD5を確認し、別途準備した4.4.2のOSの中身を調べて同一であることを確認。
そして実機に流し込んでみました。

この時、前述の公式ツールのinstall apk機能で流し込もうとしたのですが、OS標準で搭載すべきファイルであったせいなのか、何故か機能してくれませんでした。
なので、コンソールからadb installで強制的にインストール。

すると、存在しなかった音声認識ができるようになってくれました!
アプリからの制御なのでインテント経由ですが、これも問題ありません。

Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(
RecognizerIntent.EXTRA_LANGUAGE_MODEL,  RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "VoiceRecognitionTest");
startActivityForResult(intent, REQUEST_CODE_VOICE);

こんな感じで呼び出せました。

しかし無理に入れたせいなのか、内部に別途設定があるのか、音声認識に関する拡張機能の項目が設定画面に表示されませんでした。
海外コミュニティでもこの謎が解明されておらず、ここは断念。

ちなみにInfoLinkerには工場出荷状態に戻す事も可能なので、失敗したらリセットでOKです。

2-2.カメラとQRコードの認識

InfoLinkerは前面にカメラが付いてます。
お客様からの要求事項には常時カメラ映像の表示と音声連携で映像撮影もあったのですが、良くあるサーフェスに撮影画像を出す方法で問題なく動作しました。
QRコードはzixingを入れて常時解析する事を検討していましたが、実機用に調整されたzixingが既に入っており、そのアプリとの連携で良いという事になりました。
そのzixingとの連携方法ですが、、、

Intent intent = new Intent("com.google.zxing.client.android.SCAN”);

WestUnitis社のサポート様はQRコード連携について快く教えて頂き、上記の連携が可能との事を私に知らせてくれました。
しかしこの方法ではなぜか上手く行かず、Android解析ツールを使用し連携可能なインテント一覧を調べる羽目に。
結果、呼び出し方法は以下の形式でないと動作しない事が判明。

Intent intent = new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setClassName(
"com.google.zxing.client.android",
"com.google.zxing.client.android.CaptureActivity");

また、zixingはカメラとコンフリクトするため、画像撮影のためにカメラ画像をサーフェスに表示しているのならばインテント呼び出しの前にカメラを止めなければ駄目です。

3.Wifi通信

音声認識機能を使用するにはWifi等のネットワーク通信が必須です。
InfoLinkerにはWifi機能が標準で付いていますのでこの点は問題ありません。
サーバとの通信も必要だったため、httpcore-4.4.4等も入れ込みましたが、この辺は特にカスタマイズすべき部分ではない事もあって問題なく動作しました。

4.メニュー

実機独自のメニューが搭載されています。
起動可能なアプリは画面全体に表示され、ボタンで左右にスクロールして選択する方式です。

拾い物の画像です、すみません。
このメニューシステムは簡単な設定テキストファイルが存在しており、ボタンの数も限られる関係から、このファイルを修正して自前アプリを追加する必要があります。
設定ファイルにはクラス名などを記載する必要があるのですが、開発者なら問題ないでしょう。

その他

以上のように。InfoLinkerをカスタマイズして独自アプリを作るには、通常のAndroidアプリというよりは様々な努力や調整が必要になるようです。
ボタンが触りづらい位置にあり、画面を触れないウェアラブルデバイスの宿命とも言えるので、この実機に問題があるわけではありませんので念のため。
電池が余り持たず本体が結構熱くなる点は、今後の改良と小型化に期待という感じです。

導入実例も多いようですので、この先あちこちでこのようなデバイスが増えていくかと思われます。
個人的にも価格が下がれば日常的に使いたいものの一つですね。

今回はこんなところで。

0 件のコメント:

コメントを投稿