ウォッチフェイス サービスを構築する

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

ウォッチフェイスは、Wear OS アプリにパッケージされているサービスです。ユーザーが利用可能なウォッチフェイスを選択すると、ウォッチフェイスが表示され、サービスのコールバック メソッドが呼び出されます。

ウォッチフェイスのある Wear アプリをインストールすると、ユーザーはスマートウォッチでウォッチフェイス選択ツールを使用してウォッチフェイスを選択できます。また、ペア設定されているスマートフォンのコンパニオン アプリでも、ウォッチフェイスを選択できます。

このページでは、Wear OS プロジェクトを構成してウォッチフェイスを追加する方法と、ウォッチフェイス サービスを実装する方法について説明します。

ウォッチフェイス プロジェクトを作成する

Android Studio でウォッチフェイス用のプロジェクトを作成する手順は次のとおりです。

  1. [File] > [New] > [New project] をクリックします。
  2. [Select a project template] ウィンドウで [Wear] タブを選択し、オプションのリストから [Watch Face] を選択して、[Next] をクリックします。
  3. [Configure your project] ウィンドウで、デフォルト値のまま [Finish] をクリックします。

Android Studio は、ウォッチフェイス サービス用の app モジュールを使用してプロジェクトを作成します。

依存関係

Android Studio は、必要なエントリを build.gradle ファイルに自動的に追加します。

AndroidX ウォッチフェイス ライブラリは現在利用できません。試すには、GitHub のコードサンプルをご覧ください。

ウェアラブル サポート ライブラリ API リファレンス

リファレンス ドキュメントには、ウォッチフェイスを実装する際に使用するクラスについての詳細な情報が記載されています。ウェアラブル サポート ライブラリについては、API リファレンス ドキュメントをご覧ください。

注: Wear OS の開発には Android Studio を使用することをおすすめします。Android Studio では、プロジェクトのセットアップ、ライブラリのインクルード、パッケージングを容易に行うことができます。

権限を宣言する

ウォッチフェイスには WAKE_LOCK 権限が必要です。Wear OS アプリとスマートフォン アプリの両方のマニフェスト ファイルで、manifest 要素に以下の権限を追加します。

<manifest ...>
    <uses-permission
        android:name="android.permission.WAKE_LOCK" />

    <!-- Required for complications to receive complication data and open the provider chooser. -->
    <uses-permission
        android:name="com.google.android.wearable.permission.RECEIVE_COMPLICATION_DATA"/>
    ...
</manifest>

長方形デバイスをサポートする

デフォルトでは、長方形デバイスのウォッチフェイスは正方形のエミュレーション モードで動作し、円形と正方形のデバイス向けに構築されたウォッチフェイスをサポートします。長方形デバイスを完全にサポートする場合は、次のコードサンプルに示すように、manifest のウォッチフェイス servicemeta-data タグを作成し、android.service.wallpaper.square_modefalse に設定することで、この動作をオーバーライドします。

<manifest ...>
    <application ...>
        <service
            android:name=".MyWatchFace"
            android:label="My Watch Face"
            android:permission="android.permission.BIND_WALLPAPER">

            ...

            <meta-data
                android:name="android.service.wallpaper.square_mode"
                android:value="false" />
            ...
        </service>
    ...
    </application>
    ...
</manifest>

サービスとコールバック メソッドを実装する

Wear OS のウォッチフェイスは WatchFaceService として実装されます。WatchFaceService を実装するには、UserStyleSchemaComplicationSlotsManagerWatchFace という 3 つのオブジェクトを作成する必要があります。

これら 3 つのオブジェクトは、WatchFaceService の 3 つの抽象メソッドをオーバーライドすることで指定します。

Kotlin

class CustomWatchFaceService : WatchFaceService() {

    /**
     * The specification of settings the watch face supports.
     * This is similar to a database schema.
     */
    override fun createUserStyleSchema(): UserStyleSchema = // ...

    /**
     * The complication slot configuration for the watchface.
     */
    override fun createComplicationSlotsManager(
        currentUserStyleRepository: CurrentUserStyleRepository
    ): ComplicationSlotsManager = // ...

    /**
     * The watch face itself, which includes the renderer for drawing.
     */
    override suspend fun createWatchFace(
        surfaceHolder: SurfaceHolder,
        watchState: WatchState,
        complicationSlotsManager: ComplicationSlotsManager,
        currentUserStyleRepository: CurrentUserStyleRepository
    ): WatchFace = // ...

}

ウォッチフェイス サービスを登録する

ウォッチフェイス サービスを実装したら、ウェアラブル アプリのマニフェスト ファイルに実装を登録します。ユーザーがこのアプリをインストールすると、システムはサービスに関する情報を使用して、Wear OS のコンパニオン アプリと、ウェアラブル デバイスのウォッチフェイス選択ツールで、ウォッチフェイスを選択できるようにします。

次のサンプルは、application 要素にウォッチフェイスの実装を登録する方法を示しています。

<service
    android:name=".AnalogWatchFaceService"
    android:label="@string/analog_name"
    android:permission="android.permission.BIND_WALLPAPER" >
    <meta-data
        android:name="android.service.wallpaper"
        android:resource="@xml/watch_face" />
    <meta-data
        android:name="com.google.android.wearable.watchface.preview"
        android:resource="@drawable/preview_analog" />
    <meta-data
        android:name="com.google.android.wearable.watchface.preview_circular"
        android:resource="@drawable/preview_analog_circular" />
    <intent-filter>
        <action android:name="android.service.wallpaper.WallpaperService" />
        <category
            android:name=
            "com.google.android.wearable.watchface.category.WATCH_FACE" />
    </intent-filter>
</service>

Wear OS by Google のコンパニオン アプリと、ウェアラブル デバイスのウォッチフェイス選択ツールは、デバイスにインストールされているすべてのウォッチフェイスをユーザーに提示する際に、com.google.android.wearable.watchface.preview メタデータ エントリで定義されているプレビュー画像を使用します。このドローアブルを取得するには、Wear OS デバイスまたはエミュレータ インスタンスでウォッチフェイスを実行し、スクリーンショットを撮ります。hdpi 画面を持つ Wear デバイスでは、プレビュー画像のサイズは通常、320 x 320 ピクセルです。

円形のデバイスでは外観が大きく異なるウォッチフェイスの場合は、円形と正方形の両方のプレビュー画像を指定できます。円形のプレビュー画像を指定するには、com.google.android.wearable.watchface.preview_circular メタデータ エントリを使用します。ウォッチフェイスに両方のプレビュー画像を指定した場合、コンパニオン アプリと、ウェアラブルのウォッチフェイス選択ツールは、スマートウォッチの形状に応じて適切なプレビュー画像を表示します。円形のプレビュー画像が含まれていない場合、正方形と円形の両方のデバイスで正方形のプレビュー画像が使用されます。正方形のプレビュー画像は、円形のデバイスでは円形に切り取られます。

次のサンプルに示すように、android.service.wallpaper メタデータ エントリには、wallpaper 要素を含む watch_face.xml リソース ファイルを指定します。

<?xml version="1.0" encoding="UTF-8"?>
<wallpaper xmlns:android="http://schemas.android.com/apk/res/android" />

ウェアラブル アプリには複数のウォッチフェイスを含めることができます。そのためには、ウォッチフェイスの実装ごとに、ウェアラブル アプリのマニフェスト ファイルにサービス エントリを追加する必要があります。

以下の関連リソースもご覧ください。