SmartEyeGlass用アプリを1から作る
Android Studioで適当な名前のプロジェクトを作成
Target DeviceをGlassにする
あとはNextを選択してFinishでサンプルプロジェクトが立ち上がる
Android Manifestをインクルード
AndroidManifest.xmlをプロジェクトにインクルードする。
すでにAndroidManifest.xmlがある場合は、サンプルプロジェクト内のapp/manifesestsにこのファイルが入っているのが確認できるのでそれを真似するFile/New/Import Moduleを選択
SmartExtensionAPIとSmartExtensionUtilsとSmartEyeGlassAPIをプロジェクトにインポートするbuild.gradleの一番下に以下を記述
dependencies { compile project(':SmartExtensionAPI') compile project(':SmartExtensionUtils') compile project(':SmartEyeglassAPI') }
これを記述しないとimportができないので注意
ここまででひと段落。
次はjavaクラスを追加していきます
その際に最低限必要なクラスは
Constants
BroadcastReseiver
ExtensionService
RegistrationInformation
ControlExtension
PreferenceActivity
あると便利なクラスとして
ScreenSize
があります。これらを
- 基本となるクラスを継承する
Constantsクラスはそのままjavaフォルダ下にコピー
BroadcastReseiver、ExtensionService、RegistrationInformation、ScreenSizeはそれぞれを継承したクラスがあるはずなので、それらをうまい名前に変えてコピー
これらは基本的に中身はそんなに変えなくていいはず
2. ControlExtensionとPreferenceActivityを継承したjavaクラスを作る
public class SampleControlExtension extends ControlExtension {}
public class MainActivity extends PreferenceActivity {}
ControlExtensionclassを継承することで、defineやディスプレイのレイアウト、イベントリスナーの作成、イベントハンドラーの定義、デバイスセンサーからのデータ取得を行える
(具体的にはSmartEyeglassControlUtilsを使えば大体の操作ができる)
もし、Android端末では何も行わないならばPreferenceActivityには何も記述しない
ここまで出来れば下の図のような配置になっているはず
3. layoutを作る
app/res/にlayout.xmlを作り、テキストなど適当に配置する
(ここはスルーしてもいい)
4. SampleControlExtensionを作る
ここではグラスにHello Worldを表示するだけの機能を持たせたクラスとする
public class SampleControlExtension extends ControlExtension { private final SmartEyeglassControlUtils utils; private static final int SMARTEYEGLASS_API_VERSION = 1; public SampleControlExtension(Context context, String hostAppPackageName) { super(context, hostAppPackageName); // utilの初期化 utils = new SmartEyeglassControlUtils(hostAppPackageName, null); utils.setRequiredApiVersion(SMARTEYEGLASS_API_VERSION); utils.activate(context); updateLayout(); } @Override public void onResume() { updateLayout(); super.onResume(); } @Override public void onDestroy() { utils.deactivate(); } @Override public void onTouch(final ControlTouchEvent event) { super.onTouch(event); } private void updateLayout() { showLayout(R.layout.layout, null); sendText(R.id.sample_text, "Hello World!"); } }
以上!これで動くものは作れます(はず)
+α
UIの作成
SmartEyeGlassで一番上のレイヤーはcard layerと呼ばれる層で、アプリケーションを選択することができる。
WidgetAPIを使うことで、アプリの最初のアイコンを作ることができる。
詳しくはここWidgets | Sony Developer Worldを見る。
例)HelloLayouts サンプル
XML Layout definitionで使うディスプレイのサイズを定義する。
data Bundle with run-time data を作成。
ControlExtensionを継承したクラス内でSmartEyeglassControlUtils.showLayout()
を使うことでディスプレイに表示させている。
イベントハンドラの追加
次に、いつ表示するかを決めなければいけない。その方法は2つあり
・built-in event callbackをoverrideする ・イベントリスナーを作成し、ハンドラーのコールバックを定義する
があります。
built-in event callbackをoverride
onTap()
やonKey()
などの基本操作は備わっており、たとえばメニュー画面からアプリがタップされたら起動します。
その動作を改造したい場合は、改造したい関数をoverrideすればよい。
イベントリスナーの作成
SmartEyeglassEventListenerを継承することで、独自のリスナーやハンドラを定義できる。
ここでいうリスナーとハンドラは、
イベントハンドラー: イベントに対して処理を定義したメソッド。
イベントリスナー: イベントに対して処理を結びつける仕組み。
であると考えます。(自分は)
例としては
private final SmartEyeglassEventListener mSmartEyeglassEventListener = new MySmartEyeglassEventListener(); class MySmartEyeglassEventListener extends SmartEyeglassEventListener { @Override public void onCameraReceived(CameraEvent event) { } @Override public void onCameraErrorReceived(int error) { } @Override public void onCameraReceivedFile(String filePath) { } @Override public void onRecordingStatus(long timeInMs, long frames) { } }
のように各イベントごとに処理をoverrideする。
3. テストする
実機でもエミュレータでもいいのでテストしてみる。
GooglePlayに公開する際には、説明に“SmartEyeglass”を記載する。
以上で簡単なプロジェクト作成に必要なものたちを紹介しました。