Android Wear 1.3 から対話型ウォッチフェイス(Interactive watch faces)を作成するためのAPIが追加されました。
公式ブログ(Android Developers)
このAPIを使用すると、ウォッチフェイスの画面上で ユーザーがタップした座標を取得できる ため、ユーザーのタップ位置に応じて画面表示を切り替えるなど、ユーザーのタップに連動したウォッチフェイスを作ることができます。
具体的な動作イメージについては、「Pujie Black」というウォッチフェイスの [動画ページ] を確認してみるのがよいでしょう。
なお、この API を使用するには、Android Wear のバージョンが 1.3 以上である必要がありますが、このバージョンを搭載したAndroid Wear エミュレーターイメージは既に公開されているため、実機がなくても確認することができます。
対話型ウォッチフェイスに対応するには?
1. Wearアプリの起動時にWear端末のバージョンが対話型ウォッチフェイスに対応していることを確認する
※ XXXWatchFaceService.Engine を継承したクラスの onCreate() で行い、フラグなどで覚えておく
try {
PackageManager pm = getPackageManager();
PackageInfo packageInfo = pm.getPackageInfo("com.google.android.wearable.app", 0);
if (packageInfo.versionCode > 720000000) {
// 対話型ウオッチフェイスAPI(タップイベントの応答)に対応
} else {
// 対話型ウオッチフェイスAPI(タップイベントの応答)に非対応
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
ちなみに versionCode の判定に使用している 720000000 (=Android Wear 1.3)については、定数がないようで困ったものです。
以下、わかる範囲で調べた過去の Android Wear バージョンと versionCode の紐付けです。
- 1.0.1.1379611 → 201379611
- 1.0.2.1476973 → 201476973
- 1.0.4.1580939 → 401580939
- 1.0.5.1630507 → 501630507 (Android 5.0.2)
- 1.1.1.1944630 → 701944630 (Android 5.1.1)
- 1.3.0.2139573 → 722395730 (Android 5.1.1)
2. ウオッチフェイススタイルにタップイベントを許可する設定を追加する
※ XXXWatchFaceService.Engine を継承したクラスの onCreate() で行う
setWatchFaceStyle(new WatchFaceStyle.Builder(MyWatchFace.this)
.setAcceptsTapEvents(true) // <---------- この行を追加
.setCardPeekMode(WatchFaceStyle.PEEK_MODE_SHORT)
.setBackgroundVisibility(WatchFaceStyle.BACKGROUND_VISIBILITY_INTERRUPTIVE)
.setShowSystemUiTime(false)
.build());
3. タップ時に呼び出される onTapCommand() をオーバーライドし、ユーザーのタップ位置に応じた処理を行う
引数の tapType は、タップ時に TAP_TYPE_TOUCH(0)、離すと TAP_TYPE_TAP(2) がセットされます。
※ TAP_TYPE_TOUCH_CANCEL(1) は、長押し時に TAP_TYPE_TOUCH(0) の後に呼び出されていました
@Override
public void onTapCommand(int tapType, int x, int y, long eventTime) {
super.onTapCommand(tapType, x, y, eventTime);
// 動作確認用ログ出力
Log.d(TAG, "onTapCommand(" +
String.valueOf(tapType) + ":" +
String.valueOf(x) + "," +
String.valueOf(y) + ")");
}
上記のように、既存のウォッチフェイスのコードに対して、少しのコードを追加するだけで、タップに応答することができます。
タップに応じて、どのような処理をするかは、あなたのアプリケーション次第ですが、これまでよりも機能や表現力が高いウォッチフェイスを作る事ができるため、非常に嬉しいAPIだと思います。
Android Developers のサイトには、対話型ウォッチフェイスのパターン例が紹介されていますので、確認してみてください。
出典:https://developer.android.com/design/wear/watchfaces.html#interactive
