构建表盘服务

手表表盘是一个打包在 Wear OS 应用 中的 服务。当用户选择一个可用的手表表盘时,手表表盘会显示,并且会调用服务回调方法。

当用户安装一个包含手表表盘的 Wear 应用时,手表表盘可以通过手表表盘选择器在手表上使用。或者,用户可以从配对手机上的配套应用中选择手表表盘。

此页面介绍如何配置 Wear OS 项目以包含手表表盘以及如何实现手表表盘服务。

创建手表表盘项目

注意:我们建议您使用 Android Studio 进行 Wear OS 开发,因为它提供了项目设置、库包含和打包便利。

完成以下步骤以 在 Android Studio 中为您的手表表盘创建项目

  1. 点击文件 > 新建 > 新建项目
  2. 选择项目模板窗口中,选择Wear选项卡,然后从选项列表中选择手表表盘,然后点击下一步
  3. 配置您的项目窗口中,接受默认值,然后点击完成

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

这三个对象通过覆盖 WatchFaceService 中的三个抽象方法来指定,如下例所示

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>

Google 的 Wear OS 伴侣应用和可穿戴设备上的表盘选择器在向用户展示设备上安装的所有表盘时,会使用 com.google.android.wearable.watchface.preview_circular 元数据条目定义的预览图像。要获取此可绘制对象,请在 Wear OS 设备或模拟器实例上运行表盘,并 截屏。在具有 hdpi 屏幕的 Wear 设备上,预览图像的大小通常为 320x320 像素。

android.service.wallpaper 元数据条目指定了 watch_face.xml 资源文件,该文件包含一个 wallpaper 元素,如下例所示

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

您的可穿戴应用可以包含多个表盘。您必须为每个表盘实现向可穿戴应用的清单文件添加一个服务条目。

请参阅以下相关资源