ついに来ました。やっと来ました。XE16が公開されました。
以前から言われていましたがベースをICS4.0.3から、Kitkat4.4へ変更されています。
追加機能や、変更機能は、すでに他のサイトで紹介されていますので、どのように変わったのか古いバージョンのサンプルソースを利用して調べてみました。
■スクリーン録画って使えるの?
いきなり開発とは関係ない話になります。スクリーン録画は、Android Kitkat4.4から追加された機能で、その名の通り動作中の動画撮れる機能です。
Google GlassもKitkat 4.4になったんだし、この機能も使えるんじゃないの?って事で試してみました。
実際に録画した動画がこちらになります。
どうでしょう?いい感じではないでしょうか?
Google Glassは内容を人に伝えづらい端末です。
録画した動画を見て頂くことで、Google Glassでの動きも伝えやすくなると思います。
■XE12からの変更点
では、本題です。
XE12から何が変わったのかを探っていきます。
まずは、GDKから。GoogleGlass XE16用のGDKは、アップデート前から配信されています。XE12から何が変わったのかを探っていきます。
実は、サンプルコードも配信される前からXE16用になってます。
※今回は、よく参考に使われるstopwatchを利用しています。
これらをもとに古いバージョンのサンプルを最新のGDKでビルドしてみました。
結果はこんな感じです。
・LiveCardの生成方法
StopwatchService.javaでエラーが発生している箇所を見てみると、LiveCardの生成するためのTimelineManagerクラスが削除されました。[StopwatchService.java]
XE16以前の記述方法
@Override public int onStartCommand(Intent intent, int flags, int startId) { if (mLiveCard == null) { Log.d(TAG, "Publishing LiveCard"); mLiveCard = mTimelineManager.createLiveCard(LIVE_CARD_TAG); // Keep track of the callback to remove it before unpublishing. mCallback = new ChronometerDrawer(this); mLiveCard.setDirectRenderingEnabled(true).getSurfaceHolder().addCallback(mCallback); Intent menuIntent = new Intent(this, MenuActivity.class); menuIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); mLiveCard.setAction(PendingIntent.getActivity(this, 0, menuIntent, 0)); mLiveCard.publish(PublishMode.REVEAL); Log.d(TAG, "Done publishing LiveCard"); } else { // TODO(alainv): Jump to the LiveCard when API is available. } return START_STICKY; }
こちらが新しいバージョンの記述方法です。
@Override public int onStartCommand(Intent intent, int flags, int startId) { if (mLiveCard == null) { mLiveCard = new LiveCard(this, LIVE_CARD_TAG); // Keep track of the callback to remove it before unpublishing. mCallback = new ChronometerDrawer(this); mLiveCard.setDirectRenderingEnabled(true).getSurfaceHolder().addCallback(mCallback); Intent menuIntent = new Intent(this, MenuActivity.class); menuIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); mLiveCard.setAction(PendingIntent.getActivity(this, 0, menuIntent, 0)); mLiveCard.attach(this); mLiveCard.publish(PublishMode.REVEAL); } else { mLiveCard.navigate(); } return START_STICKY; }
TimelineManagerからLiveCardを生成するのではなく、LiveCardを直接生成する方法に変わっています。
LiveCardの生成方法を変更することで、とりあえずはビルドが通る状態となりました。
では早速、Glassで動作確認をしてみます。
・音声で起動しない
インストールした後、「start a stopwatch」と話しても起動してくれません。音声起動どころか、音声起動の一覧にすら表示されていません。
調べてみると音声起動の設定方法が変わっていました。
今回のバージョンより、決まった音声のみの起動可能となってます。
<uses-permission android:name="com.google.android.glass.permission.DEVELOPMENT" />
音声起動の部分は、今後公開するうえでネックになりそうに思います。
これで起動もできたので、ストップウォッチの動作を確認します。
動作も問題なしだったので終了したところ・・
まさかの異常終了。
エラーログを見るとこんな感じに。
・openOptionMenuの呼び出しタイミング
問題を調べてみると、openOptionMenuが呼び出されるタイミングが変わっていました。
[MenuActivity.java]
XE16以前の記述方法
@Override public void onResume() { super.onResume(); openOptionsMenu(); }
こちらが新しいバージョンの記述方法です。
@Override public void onAttachedToWindow() { super.onAttachedToWindow(); openOptionsMenu(); }
ここまで来ると以前と同じように動作するようになりました。
今回調査をしてみてLiveCard周りの変更が大きいと感じました。
説明できていませんが、追加されている部分も多くあります(attachやnavigateなど)
音声起動は、着々と一般販売に向けて制限しているのかなという感じです。
Bluetooth周りも大幅に変わったと聞きます。
以前のバージョンでは、かなり苦労したので今回のバージョンアップで、少しでも素直になってくれたらと期待しています。
LiveCardの追加分も含めて、別の機会で報告できればと思います。
㈱ブリリアントサービス 大阪開発部 開発課 田中雅也