Xây dựng dịch vụ mặt đồng hồ

Mặt đồng hồ là một dịch vụ được đóng gói trong Ứng dụng Wear OS. Khi người dùng chọn một mặt đồng hồ có sẵn, hệ thống sẽ hiển thị mặt đồng hồ và gọi các phương thức gọi lại dịch vụ.

Khi người dùng cài đặt một ứng dụng Wear có mặt đồng hồ, thì mặt đồng hồ đó sẽ có mặt trên đồng hồ bằng cách sử dụng bộ chọn mặt đồng hồ. Ngoài ra, người dùng có thể chọn mặt đồng hồ trong ứng dụng đồng hành trên điện thoại đã được ghép nối.

Trang này mô tả cách định cấu hình dự án Wear OS để đưa vào mặt đồng hồ và cách triển khai dịch vụ mặt đồng hồ.

Tạo một dự án mặt đồng hồ

Lưu ý: Bạn nên sử dụng Android Studio để phát triển Wear OS, vì phần mềm này hỗ trợ việc thiết lập dự án, đưa vào thư viện và đóng gói thuận tiện.

Hãy hoàn tất các bước sau để tạo một dự án trong Android Studio cho mặt đồng hồ của bạn:

  1. Nhấp vào File > New > New project (Tệp > Mới > Dự án mới).
  2. Trong cửa sổ Select a project template (Chọn mẫu dự án), hãy chọn thẻ Wear, chọn Watch Face (Mặt đồng hồ) trong danh sách tuỳ chọn rồi nhấp vào Next (Tiếp theo).
  3. Trong cửa sổ Configure your project (Định cấu hình dự án của bạn), hãy giữ nguyên giá trị mặc định rồi nhấp vào Finish (Hoàn tất).

Android Studio tạo dự án bằng mô-đun app cho dịch vụ mặt đồng hồ.

Phần phụ thuộc

Android Studio sẽ tự động thêm phần phụ thuộc cần thiết vào các tệp build.gradle của bạn. Thư viện mặt đồng hồ AndroidX cũng nằm trong phần phụ thuộc này; xem mã mẫu trên GitHub để biết thông tin chi tiết về thư viện này.

Tài liệu tham khảo API cho thư viện hỗ trợ Thiết bị đeo

Tài liệu tham khảo cung cấp thông tin chi tiết về các lớp bạn sử dụng để triển khai mặt đồng hồ. Duyệt xem tài liệu tham khảo API cho thư viện hỗ trợ Thiết bị đeo.

Khai báo quyền

Mặt đồng hồ cần có quyền WAKE_LOCK. Thêm quyền sau đây vào các tệp kê khai của cả ứng dụng Wear OS và ứng dụng dành cho điện thoại trong phần tử 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>

Hỗ trợ các thiết bị hình chữ nhật

Theo mặc định, mặt đồng hồ trên thiết bị hình chữ nhật sẽ chạy ở chế độ mô phỏng hình vuông để hỗ trợ mặt đồng hồ được tạo cho thiết bị hình tròn và hình vuông. Nếu bạn muốn hỗ trợ đầy đủ các thiết bị hình chữ nhật, hãy ghi đè hành vi này bằng cách tạo một thẻ meta-data trong service mặt đồng hồ ở manifest, đồng thời đặt android.service.wallpaper.square_mode thành false như được thể hiện trong mã mẫu sau:

<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>

Triển khai dịch vụ và phương thức gọi lại

Các mặt đồng hồ trong Wear OS được triển khai dưới dạng WatchFaceService. Để triển khai WatchFaceService, bạn cần tạo 3 đối tượng: UserStyleSchema, ComplicationSlotsManagerWatchFace.

Ba đối tượng này được chỉ định bằng cách ghi đè 3 phương thức trừu tượng của WatchFaceService, như trong ví dụ sau:

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 = // ...

}

Đăng ký dịch vụ mặt đồng hồ

Sau khi bạn triển khai dịch vụ mặt đồng hồ, hãy đăng ký phương thức triển khai trong tệp kê khai của ứng dụng dành cho thiết bị đeo. Khi người dùng cài đặt ứng dụng này, hệ thống sẽ sử dụng thông tin về dịch vụ để cung cấp mặt đồng hồ trong ứng dụng đồng hành Wear OS và trong bộ chọn mặt đồng hồ trên thiết bị đeo.

Mẫu sau đây cho biết cách đăng ký triển khai mặt đồng hồ trong phần tử <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>

Ứng dụng đồng hành Wear OS by Google và bộ chọn mặt đồng hồ trên thiết bị đeo sử dụng hình ảnh xem trước do mục siêu dữ liệu com.google.android.wearable.watchface.preview xác định khi trình bày cho người dùng tất cả mặt đồng hồ được cài đặt trên thiết bị. Để nhận đối tượng có thể vẽ này, hãy chạy mặt đồng hồ trên thiết bị Wear OS hoặc trong một phiên bản trình mô phỏng rồi chụp ảnh màn hình. Trên thiết bị Wear có màn hình hdpi, hình ảnh xem trước thường có kích thước 320x320 pixel.

Các mặt đồng hồ trông khác biệt đáng kể trên các thiết bị hình tròn có thể cung cấp hình ảnh xem trước cho cả mặt tròn lẫn mặt vuông. Để chỉ định hình ảnh xem trước cho thiết bị có mặt hình tròn, hãy sử dụng mục siêu dữ liệu com.google.android.wearable.watchface.preview_circular. Nếu mặt đồng hồ bao gồm cả hình ảnh xem trước của mặt vuông lẫn mặt tròn, ứng dụng đồng hành và bộ chọn mặt đồng hồ trên thiết bị đeo sẽ hiển thị hình ảnh thích hợp, tuỳ thuộc vào hình dạng của đồng hồ. Nếu không có hình ảnh xem trước cho mặt đồng hồ hình tròn, thì hình ảnh xem trước cho thiết bị có mặt hình vuông sẽ được dùng cho cả mặt hình vuông lẫn mặt hình tròn. Đối với các thiết bị hình tròn, hình ảnh xem trước của thiết bị có mặt hình vuông sẽ được cắt theo thiết bị có mặt hình tròn.

Mục siêu dữ liệu android.service.wallpaper chỉ định tệp tài nguyên watch_face.xml, chứa phần tử wallpaper như trong mẫu sau:

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

Ứng dụng dành cho thiết bị đeo có thể chứa nhiều mặt đồng hồ. Bạn phải thêm mục dịch vụ vào tệp kê khai của ứng dụng dành cho thiết bị đeo đối với từng hoạt động triển khai mặt đồng hồ.

Hãy tham khảo các tài nguyên có liên quan sau đây: