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

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

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

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

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

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

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 リファレンス ドキュメントをご覧ください。

権限を宣言する

ウォッチフェイスには 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>

ダイレクト ブートをサポートする

ダイレクト ブートのガイダンスに沿って、ユーザーのロック解除の前にウォッチフェイスを利用できるようにする必要があります。

  1. マニフェストで、サービスの android:directBootAware 属性を true に設定します。
  2. ウォッチフェイスは、デバイス暗号化ストレージに情報を保存する必要があります。

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

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_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_circular メタデータ エントリで定義されているプレビュー画像を使用します。このドローアブルを取得するには、Wear OS デバイスまたはエミュレータ インスタンスでウォッチフェイスを実行し、スクリーンショットを撮ります。hdpi 画面を持つ Wear デバイスでは、プレビュー画像のサイズは通常、320 x 320 ピクセルです。

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

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

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

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