連載
» 2014年12月03日 18時00分 公開

Android Wear用アプリの花形、時計アプリ「Watch Face」の基本的な作り方Androidで動く携帯Javaアプリ作成入門(56)(2/3 ページ)

[緒方聡,株式会社イーフロー]

AndroidManifest.xmlへの定義

 Watch Faceアプリは、ごく普通のActivityを持ったアプリとして作ります。ただし、Watch Faceとして動作させるために、いくつかの決まり事があります。今回のサンプルアプリのAndroidManifest.xmlを元に説明します。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.ogata.watchfacesample" >
 
    <uses-feature android:name="android.hardware.type.watch" />
 
    <!-- 【1】 -->
    <uses-permission android:name="com.google.android.permission.PROVIDE_BACKGROUND" />
    <!-- 【2】 -->
    <uses-permission android:name="android.permission.WAKE_LOCK" />
 
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.DeviceDefault" >
        <!-- 【3】 -->
        <activity
            android:allowEmbedded="true"
            android:name="com.example.ogata.watchfacesample.WatchFaceActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
                <!-- 【4】 -->
                <category android:name="com.google.android.clockwork.home.category.HOME_BACKGROUND" />
            </intent-filter>
            <!-- 【5】 -->
            <meta-data
                android:name="com.google.android.clockwork.home.preview"
                android:resource="@drawable/ic_launcher" />
        </activity>
    </application>
</manifest>

 Watch Faceとして2つのパーミッションを追加します(上記リスト【1】と【2】)。

 Android WearはAndroid Wear自身を操作してアプリをインストールしません。通常は「コンパニオン」となるスマートフォン用のアプリにAndroid Wear用アプリをバンドルし、スマートフォンを通じてバンドルされたAndroid Wear用アプリがインストールされます。

 【1】のcom.google.android.permission.PROVIDE_BACKGROUNDパーミッションは、自動的にAndroid Wearにアプリをインストールすることを許可するパーミッションです。ちなみに今回のサンプルはAndroid Wearに直接インストールする想定のアプリなので、このパーミッションは宣言されてはいますが利用されていません。

 Watch Faceアプリは現在時刻を表示する時計としての役割を果たさなければなりません。一方で、Android Wearはバッテリの消耗を抑えるために、一定期間でスリープ状態に移行します。スリープ状態では、たとえWatch Faceアプリの画面が表示されていたとしても、表示内容が更新されているとは限りません。

 そこで【2】のandroid.permission.WAKE_LOCKパーミッションを用いて「WakeLock」を取得し、最低限の更新を行う必要があります。特に現段階の多くのAndroid Wear機器は、バッテリが1日しか持たないため、WakeLockでバッテリの消耗を加速し過ぎないように注意してください。なお、今回のサンプルは簡単にするためにWakeLockを用いていないので、このパーミッションも宣言されてはいますが利用されていません。

 allowEmbeddedという属性をActivityに追加します。この属性はActivityが別のActivityの入れ子になれるかどうかを設定するもので、Watch Faceアプリの対象となるActivityには【3】のようにallowEmbedded="true"を追加する必要があります。

 またWatch Faceはintent-filterに【4】のようにcom.google.android.clockwork.home.category.HOME_BACKGROUNDカテゴリを設定する必要があります。サンプルではランチャーから起動可能にするandroid.intent.category.LAUNCHERカテゴリも設定されています。これはAndroid Studioからデバッグ起動させるために入れているもので、Watch FaceのActivityとしてはない方がいいでしょう。

 Watch FaceはAndroid Wear上でプレビューを見ながら切り替えることになります。そのプレビューは画像としてアプリに組み込んでおき、【5】のようにmeta-dataとして設定します。プレビュー画像はそのWatch Faceアプリの標準的な見た目が反映されているのが望ましく、今回のサンプルではアプリのキャプチャをほぼそのまま使用しています。

Android Wearのレイアウトは、四角画面と丸画面の2通り

 Android Wearのレイアウトは、四角画面と丸画面の2通りを用意して「WatchViewStub」というクラスを用いて切り替えるのが主流で、今回のサンプルアプリでも切り替えています(本来は同じレイアウトなので切り替える必要はないのですが、解説のためにそのようにしています)。

 細かい属性を省略すると、四角画面も丸画面も以下のようなレイアウトになっています。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout>
    <TextView />
    <TextClock />
</LinearLayout>

 時計部分には「TextClock」というViewを使用しています。これはAndroid 4.2(Jelly Bean、API Level 17)から導入されたViewで、非推奨になったDigitalClockの代わりに使用します。TextClockは細かな制御はできないものの、完全にTextClock側で時刻同期を行ってくれるので、簡単な時計であれば使用することをお勧めします。

 例えば「12:34」と表示されている中央のコロンを点滅させたいとか、秒まで表示したいとか、世界時計として各地の時刻を表示したいとか、表示をアニメーションさせたいとか、そうしたことを行いたいのであれば独自に実装しなければなりません。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。