Wear 시계 화면

Wear OS by Google 스마트시계용 애플리케이션을 만듭니다.
최근 업데이트 현재 안정화 버전 다음 출시 후보 베타 버전 알파 버전
2021년 12월 15일 1.0.0 - - 1.1.0-alpha01

종속 항목 선언

Wear의 종속 항목을 추가하려면 프로젝트에 Google Maven 저장소를 추가해야 합니다. 자세한 내용은 Google Maven 저장소를 읽어보세요.

다음과 같이 앱 또는 모듈의 build.gradle 파일에 필요한 아티팩트의 종속 항목을 추가합니다.

Groovy

dependencies {
    // Use to implement wear watchfaces
    implementation "androidx.wear.watchface:watchface:1.1.0-alpha02"

    // Use to implement wear watchface complications
    implementation "androidx.wear.watchface:watchface-complications-data-source:1.1.0-alpha02"
    // (Kotlin-specific extensions)
    implementation "androidx.wear.watchface:watchface-complications-data-source-ktx:1.1.0-alpha02"

    // Use to implement a watchface style and complication editor
    implementation "androidx.wear.watchface:watchface-editor:1.1.0-alpha02"
}

Kotlin

dependencies {
    // Use to implement wear watchfaces
    implementation("androidx.wear.watchface:watchface:1.1.0-alpha02")

    // Use to implement wear watchface complications
    implementation "androidx.wear.watchface:watchface-complications-data-source:1.1.0-alpha02"
    // (Kotlin-specific extensions)
    implementation "androidx.wear.watchface:watchface-complications-data-source-ktx:1.1.0-alpha02"

    // Use to implement a watchface style and complication editor
    implementation("androidx.wear.watchface:watchface-editor:1.1.0-alpha02")
}

종속 항목에 관한 자세한 내용은 빌드 종속 항목 추가를 참고하세요.

의견

제출하신 의견은 Jetpack을 개선하는 데 도움이 됩니다. 새로운 문제를 발견하거나 라이브러리 개선을 위한 아이디어가 있다면 Google에 알려 주세요. 새 의견을 제출하기 전에 이 라이브러리의 기존 문제를 살펴보시기 바랍니다. 별표 버튼을 클릭하여 기존 문제에 투표할 수 있습니다.

새로운 문제 제출하기

자세한 내용은 Issue Tracker 문서를 참고하세요.

버전 1.1

버전 1.1.0-alpha01

2021년 12월 15일

androidx.wear.watchface:watchface-*:1.1.0-alpha01이 출시되었습니다. 버전 1.1.0-alpha01에 포함된 커밋을 확인하세요.

새로운 기능

  • 이제 UserStyleSchemaComplicationSlots를 XML로 정의할 수 있습니다. 이에 따라 시계 화면 구성이 간소화됩니다. 또한 WatchFaceMetadataClient 쿼리는 메타데이터를 가져오기 위해 서비스에 바인딩할 필요가 없기 때문에 더 빠르게 처리됩니다. WatchFaceMetadataClientListenableWatchFaceMetadataClient는 더 이상 실험용이 아니며 안정적인 API에 포함됩니다. 시스템은 선택적으로 여러 시계 화면 인스턴스를 지원할 수 있으며, 인스턴스마다 각각의 사용자 정의 스타일 지정 옵션이 있습니다. 이 옵션은 시계 화면 선택 도구에 표시됩니다. 옵션을 사용하려면 시계 화면에서 매니페스트에 다음과 같은 메타데이터 태그를 포함해야 합니다.

        <meta-data
            android:name="androidx.wear.watchface.MULTIPLE_INSTANCES_ALLOWED"
            android:value="true" />
    
  • 일부 시계 화면의 경우 시계 화면 인스턴트와 여러 인스턴스를 지원하기 위해 UserStyle에 지정되지 않은 상태를 포함하며, 이제 WatchState.watchFaceInstanceId를 통해 시계 화면의 인스턴스 ID를 사용할 수 있습니다.

  • 이제 정보 표시가 로드되는 즉시 나타나도록 ComplicationData가 캐시됩니다. ComplicationData는 시스템에서 메모리에 캐시되고 시계 화면 라이브러리에 의해 직렬화되는 경우가 있습니다. 직렬화되는 경우 관련 tapAction이 모두 손실되며 이때 ComplicationData.tapActionLostDueToSerializationtrue를 반환하고 시계 화면이 탭할 수 없음을 알리기 위해 정보 표시를 다르게 렌더링합니다(예: 비활성화하거나 반투명 처리함). 시스템에서 tapAction과 함께 업데이트된 ComplicationData를 최대한 빨리 전송합니다.

  • 일부 ComplicationData는 캐시하면 안 되는 기간이 길며, 이를 지원하기 위해 더 일반적인 기능인 ComplicationDataTimeline을 추가했습니다. 이를 통해 시계 화면에 전달되어 자동으로 캐시 및 업데이트되는 시간 제한형 ComplicationData 시퀀스를 제공할 수 있습니다. 예를 들면 수차례에 걸쳐 표시되는 오늘의 일기예보 또는 예정된 여러 캘린더 일정 등이 있습니다. 이 데이터를 반환하는 데 사용할 수 있는 새로운 onComplicationDataTimeline 메서드로 ComplicationRequestListener가 확장되었습니다.

  • DefaultComplicationDataSourcePolicy가 확장되었으므로 기본 및 보조 데이터 소스의 ComplicationType을 지정할 수 있습니다.

  • 시계 화면이 표시되어 있고 대기 모드가 아닐 때 정보 표시 업데이트 빈도가 일반 수준보다 더 잦은(최대 초당 1회) 동기식 정보 표시 제공자 지원을 추가했습니다. 참고: 동기식 정보 표시 제공자는 메모리 부담 문제로 인해 사용이 제한될 수 있습니다.

  • PendingIntentTapListener가 변경되기 전으로 되돌려질 가능성이 큽니다. 홈 버튼을 누른 후 5초 동안 시계 화면이 활동을 시작할 수 없는 프레임워크 내 근본적인 문제를 해결했기 때문입니다.

API 변경사항

  • ComplicationData.isCachedtapActionLostDueToSerialization으로 변경했습니다. 탭할 수 없음을 알리기 위해 정보 표시 슬롯을 다르게 렌더링해야 하는지를 판단할 때 더 유용합니다. (I6de2f)
  • wear-complication-data-sourceComplicationDataTimeline을 추가했습니다. 이를 통해 시계 화면에 전달되어 자동으로 캐시 및 업데이트되는 시간 제한형 ComplicationData 시퀀스를 제공할 수 있습니다. 예를 들면 수차례에 걸쳐 표시되는 오늘의 일기예보 또는 예정된 여러 캘린더 일정 등이 있습니다. 이 데이터를 반환하는 데 사용할 수 있는 새로운 onComplicationDataTimeline 메서드로 ComplicationRequestListener가 확장되었습니다. 데이터 소스 서비스를 정지시키는 새로운 Kotlin 래퍼 SuspendingTimelineComplicationDataSourceService가 있습니다. (Idecdc)
  • PendingIntentTapListenerWatchFaceControlClient.getPendingIntentForTouchEvent를 추가했습니다. 이는 프레임워크로 인해 홈 버튼을 누른 후 5초 동안 새 활동이 시작되지 않는 문제를 해결하기 위해 탭에 응답하여 인텐트를 시작해야 하는 시계 화면에 유용할 수 있습니다. (I98074)
  • 시계 화면별 ComplicationData 캐시를 도입했습니다. 이 캐시의 목적은 시스템에서 정보 표시의 데이터 값을 업데이트할 수 있을 때까지 시계 화면이 로드된 마지막 데이터 값을 표시하기 위함입니다. OEM을 위한 새로운 API 메서드인 WatchFaceControlClient.hasComplicationCache가 제공됩니다. 이 메서드는 시계 화면에 정보 표시를 전송하는 시스템의 전략에 영향을 줄 수 있습니다. ComplicationData에는 isCached 속성도 있습니다. 또한 tapAction은 캐시할 수 없고 캐시된 정보 표시에서 null이 되므로 캐시된 정보 표시를 다르게 렌더링하는 것이 좋습니다. (I404b0)
  • 이제 WatchState.watchFaceInstanceId를 통해 시계 화면의 인스턴스 ID를 사용할 수 있습니다. 이 메서드는 대부분의 시계 화면에서 사용할 필요가 없지만, 스키마에 저장되지 않은 시계 화면별 상태가 있는 경우 시계 화면 인스턴스를 식별하는 데 사용할 키가 됩니다. 이제 WatchFaceControlClient.createHeadlessWatchFaceClient를 호출할 때 ID를 제공하여 이 작업을 지원할 수 있습니다. (I1ff98)
  • 기본/보조 제공자 및 대체 시스템 제공자를 대상으로 기본 ComplicationTypes를 설정하는 기능을 포함하여 DefaultComplicationDataSourcePolicy를 확장했습니다. 이제 ComplicationSlot.defaultDataSourceType이 지원 중단됩니다. (If0ce3)
  • 이제 ComplicationSlot.configExtras는 변경 가능하며 EditorSession.openComplicationDataSourceChooser() 호출 전에 업데이트할 수 있습니다. (I6f852)
  • WatchFace.setComplicationDeniedDialogIntentsetComplicationRationaleDialogIntent를 추가했습니다. 이러한 인텐트는 정보 표시 권한을 요청하기 전에 근거 대화상자를 표시하고, 정보 표시 권한이 거부되었을 때 정보 표시를 수정하려면 정보 표시 권한이 필요함을 설명하는 또 다른 대화상자(제공자 선택기가 열리지 않으므로 대화상자가 필요함)를 표시하기 위해 시작됩니다. (I3a29c)
  • 이제 UserStyleSchemaComplicationSlots를 XML로 정의할 수 있습니다. 이에 따라 시계 화면 구성이 간소화되며 WatchFaceMetadataClient 쿼리는 메타데이터를 가져오기 위해 서비스에 바인딩될 필요가 없기 때문에 더 빠르게 처리됩니다. (I85bfa)
  • 클라이언트가 시계 화면이 getPendingIntentForTouchEvent를 지원하는지 확인할 수 있도록 InteractiveWatchFaceClient.supportsPendingIntentForTouchEvent를 추가했습니다. (I0b917)
  • WatchFaceMetadataClientListenableWatchFaceMetadataClient는 더 이상 실험용이 아닙니다. 가능한 경우 시계 화면 바인더를 열지 않고도 시계 화면 메타데이터를 효율적으로 가져오는 데 사용할 수 있습니다. (Ibb827)
  • 시계 화면이 표시되어 있고 대기 모드가 아닐 때 정보 표시 업데이트 빈도가 일반 수준보다 더 잦은(최대 초당 1회) 동기식 정보 표시 제공자 지원을 추가했습니다. 이 기능을 사용하려면 제공자가 매니페스트에 새 androidx.wear.watchface.complications.data.source.SYNCHRONOUS_UPDATE_PERIOD_SECONDS 메타데이터 태그를 포함하고 onSynchronousComplicationRequest를 재정의해야 합니다. 데이터 소스의 특성에 따라 정보 표시의 대화형 모드가 시작될 때와 종료될 때 알림을 받도록 onStartSynchronousComplicationRequestsonStopInteractiveComplicationRequests를 재정의해야 할 수도 있습니다. (I8fe9d)

버전 1.0

버전 1.0.0

2021년 12월 1일

androidx.wear.watchface:watchface-*:1.0.0이 출시되었습니다. 버전 1.0.0에 포함된 커밋을 확인하세요.

1.0.0의 주요 기능

androidx.wear.watchface 패키지는 WearOS 시계 화면 개발에 권장되는 새로운 라이브러리입니다. 기존 웨어러블 지원 라이브러리에 비해 여러 새로운 기능이 있습니다.

  • 라이브러리에서 바로 사용자 스타일(예: 색상 팔레트, 시계 침 스타일, 시간 표시 모양 등의 변경)을 지정할 수 있습니다(androidx.wear.watchface.style 참고). 이제 androidx.wear.watchface.editor를 사용하여 시계 화면 편집기를 훨씬 더 쉽게 개발하고, 추가 코드를 작성할 필요 없이 시스템 호환 앱에서 시계 화면을 수정할 수 있습니다.
  • 권장사항이 통합되었습니다. 새로운 라이브러리는 정보 표시와 관련된 스크린 리더 콘텐츠 라벨을 자동으로 생성하며, 개발자가 나만의 라벨을 추가할 수도 있습니다. 배터리가 부족하고 충전 중이 아닐 때 프레임 속도가 자동으로 줄어들어 배터리 수명이 개선됩니다.
  • 특히 많은 상용구 코드가 라이브러리로 이전된 정보 표시의 경우 시계 화면을 개발하는 데 필요한 코드가 줄어듭니다.

버그 수정

  • EditorSession.userStyle.compareAndSet 수정(I6f676)
  • 매우 짧은 시계 화면 지연 문제 해결(Iffb97)
  • UI 스레드에서 InteractiveWatchFaceImpl.onDestroy 전송(I83340)
  • broadcast receiver의 몇 가지 문제 해결(I7d25f)

버전 1.0.0-rc01

2021년 11월 3일

androidx.wear.watchface:watchface-*:1.0.0-rc01이 출시되었습니다. 버전 1.0.0-rc01에 포함된 커밋을 확인하세요.

버그 수정

  • 흐름 마이그레이션으로 인해 중단된 dump()(adb 셸 dumpsys로 호출됨)를 수정했습니다. (087cf9e)

  • writeDirectBootPrefs의 올바른 순서를 확인합니다. writeDirectBootPrefs가 항상 initStyleAndComplications 이후에 실행되도록 합니다. 그러지 않으면 UI 스레드 초기화가 지연될 위험이 있습니다. (37650ac)

  • Renderer.onDestroy가 호출되었는지 확인합니다. 렌더기가 생성되었지만 WF init가 완료되지 않고 Engine.onDestroy가 호출되는 시나리오에서는 Renderer.onDestroy를 호출해야 합니다. (f9952dc)

  • isBatteryLowAndNotCharging을 최적화/수정합니다. 이 패치는 isBatteryLowAndNotCharging의 초기 설정을 이전으로 이동하여 createWatchFace와 동시에 실행할 수 있습니다. 또한 이제 ACTION_POWER_DISCONNECTED를 수신 대기합니다. (ddffd80)

  • InteractiveWatchFaceClientImpl.isConnectionAlive를 닫은 후 false로 설정합니다. (ab9774e)

버전 1.0.0-beta01

2021년 10월 27일

androidx.wear.watchface:watchface-*:1.0.0-beta01이 출시되었습니다. 버전 1.0.0-beta01에 포함된 커밋을 확인하세요.

버전 1.0.0-alpha24

2021년 10월 13일

androidx.wear.watchface:watchface-*:1.0.0-alpha24가 출시되었습니다. 버전 1.0.0-alpha24에 포함된 커밋을 확인하세요.

API 변경사항

  • 패키지 androidx.wear.watchface.complications의 클래스가 새 wear:watchface:watchface-complications 프로젝트로 이동되었습니다. 따라서 이 라이브러리와 wear:watchface:watchface-complications-data의 이전 알파 버전을 포함할 수 없습니다. 중복 클래스와 관련된 오류가 발생하기 때문입니다. (I97195)
  • Renderer.dump가 Renderer.onDump로 이름이 바뀌었고 @UiThread로 주석이 달렸습니다. (I44845)
  • InteractiveWatchFaceClient.addWatchFaceReadyListener의 이름은 addOnWatchFaceReadyListener로, removeWatchFaceReadyListener의 이름은 removeOnWatchFaceReadyListener로 바뀌었습니다. (I48fea)
  • EditorSession getComplicationsPreviewDatagetComplicationsDataSourceInfo는 더 이상 정지 함수가 아닙니다. 대신 초기에 값이 null인 StateFlow<> 속성입니다. ListenableEditorSession에서 getListenableComplicationPreviewDatagetListenableComplicationsProviderInfo는 기본 클래스에서 삭제되고 새 StateFlow<> 객체로 대체되었습니다. 자바 코드의 변경사항을 수신 대기해야 하는 경우 androidx.lifecycle.FlowLiveDataConversions.asLiveData를 사용하여 LiveData<>로 변환하는 것이 좋습니다. (Ic5483)

버전 1.0.0-alpha23

2021년 9월 29일

androidx.wear.watchface:watchface-*:1.0.0-alpha23이 출시되었습니다. 버전 1.0.0-alpha23에 포함된 커밋을 확인하세요.

새로운 기능

이제 시계 화면 라이브러리가 단일 라이브러리 그룹입니다. 따라서 라이브러리가 이동되어 gradle 가져오기를 다음과 같이 업데이트해야 합니다.

변경 전 신규
androidx.wear:wear-complications-data androidx.wear.watchface:watchface-complications-data
androidx.wear:wear-complications-data-source androidx.wear.watchface:watchface-complications-data-source
androidx.wear:wear-watchface androidx.wear.watchface:watchface
androidx.wear:wear-watchface-complications-rendering androidx.wear.watchface:watchface-complications-rendering
androidx.wear:wear-watchface-client androidx.wear.watchface:watchface-client
androidx.wear:wear-watchface-client-guava androidx.wear.watchface:watchface-client-guava
androidx.wear:wear-watchface-data androidx.wear.watchface:watchface-data
androidx.wear:wear-watchface-editor androidx.wear.watchface:watchface-editor
androidx.wear:wear-watchface-editor-guava androidx.wear.watchface:watchface-editor-guava
androidx.wear:wear-watchface-guava androidx.wear.watchface:watchface-guava
androidx.wear:wear-watchface-style androidx.wear.watchface:watchface-style

API 변경사항

  • 별도의 androidx.wear 시계 화면 및 정보 표시 라이브러리를 androidx.wear.watchface 라이브러리 그룹으로 이전합니다. (b25f3c0)
  • 시계 화면 편집기에서 헤드리스 편집을 지원하는지 클라이언트가 알 수 있도록 EditorRequest.canWatchFaceSupportHeadlessEditing을 추가했습니다. asop/1756809에 지원이 추가되었으므로 여기에는 일부 거짓음성이 발생합니다. 그러나 향후 모든 시계 화면의 올바른 값을 반환합니다. (ca55590)
  • 이제 렌더기에 재정의하여 ABD 셸 dumpsys 활동 서비스 WatchFaceService에서 생성된 정보에 맞춤 데이터를 추가할 수 있는 dump() 메서드가 있습니다. (95235f9)
  • 이제 InteractiveWatchFaceClient.addWatchFaceReadyListener에서 실행자를 먼저 지정합니다. (563ac2f)
  • StateFlowCompatHelper를 삭제했습니다. 대신 asLiveData(androidx.lifecycle.asLiveData)를 사용해야 합니다. (bd35d3)
  • CurrentUserStyleRepository.userStyle은 더 이상 변경할 수 없습니다. (I44889)
  • WatchFaceReadyListener를 OnWatchFaceReadyListener로 이름을 바꿨습니다. (Ic12a9)

버그 수정

  • InteractiveInstanceManager.deleteInstance를 사용하여 onDestroy를 호출합니다. 이는 InteractiveWatchFaceImpl이 가비지 컬렉션되도록 하는 데 필요합니다. (fce4af8, b/199485839)