시계 모드 서비스 빌드

시계 화면은 Wear OS 앱에 패키징된 서비스입니다. 사용자가 사용 가능한 시계 화면을 선택하면 선택한 시계 화면이 표시되고 서비스 콜백 메서드가 호출됩니다.

사용자가 시계 화면이 있는 Wear 앱을 설치하면 시계에서 시계 화면 선택기를 통해 시계 화면을 사용할 수 있습니다. 또는 사용자가 페어링된 스마트폰의 호환 앱에서 시계 화면을 선택할 수 있습니다.

이 페이지에서는 시계 화면을 포함하도록 Wear OS 프로젝트를 구성하는 방법 및 시계 화면 서비스를 구현하는 방법에 관해 설명합니다.

시계 화면 프로젝트 만들기

참고: Wear OS 개발에는 프로젝트 설정, 라이브러리 포함, 패키징 편의성을 제공하는 Android 스튜디오를 사용하는 것이 좋습니다.

Android 스튜디오에서 시계 화면을 위한 프로젝트를 생성하려면 다음 단계를 완료하세요.

  1. File > New > New project를 클릭합니다.
  2. Select a project template 창에서 Wear 탭을 선택하고 옵션 목록에서 Watch Face를 선택한 후 Next를 클릭합니다.
  3. Configure your project 창에서 기본값을 수락하고 Finish를 클릭합니다.

Android 스튜디오는 시계 화면 서비스용 app 모듈로 프로젝트를 만듭니다.

종속 항목

Android 스튜디오는 build.gradle 파일에 필요한 종속 항목을 자동으로 추가합니다. 종속 항목에는 AndroidX 시계 화면 라이브러리가 포함되어 있습니다. 이 라이브러리에 관한 자세한 내용은 GitHub의 코드 샘플을 참고하세요.

웨어러블 지원 라이브러리 API 참조

참조 문서는 시계 화면을 구현하는 데 사용하는 클래스에 관한 자세한 정보를 제공합니다. 웨어러블 지원 라이브러리용 API 참조 문서를 찾아보세요.

권한 선언

시계 화면에는 WAKE_LOCK 권한이 필요합니다. manifest 요소 아래에서 Wear OS 앱과 함께 휴대전화 앱의 매니페스트 파일에 다음 권한을 추가합니다.

<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를 구현하려면 UserStyleSchema, ComplicationSlotsManager, WatchFace라는 세 가지 객체를 만들어야 합니다.

이 세 객체는 다음 예와 같이 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>

웨어러블 기기의 Wear OS by Google 호환 앱과 시계 화면 선택 도구는 기기에 설치된 모든 시계 화면을 사용자에게 표시할 때 com.google.android.wearable.watchface.preview_circular 메타데이터 항목에 의해 정의된 미리보기 이미지를 사용합니다. 드로어블을 가져오려면 Wear OS 기기 또는 에뮬레이터 인스턴스에서 시계 화면을 실행하고 스크린샷을 찍습니다. hdpi 화면이 있는 Wear 기기에서는 미리보기 이미지의 크기가 일반적으로 320x320픽셀입니다.

android.service.wallpaper 메타데이터 항목은 다음 샘플과 같이 wallpaper 요소가 포함된 watch_face.xml 리소스 파일을 지정합니다.

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

웨어러블 앱에는 둘 이상의 시계 화면을 포함할 수 있습니다. 각각의 시계 화면 구현에서 웨어러블 앱의 매니페스트 파일에 서비스 항목을 추가해야 합니다.

다음 관련 리소스를 참고하세요.