Wear OS는 사용자가 시계를 더 이상 사용하지 않을 때 활성 앱을 저전력 모드로 자동 전환합니다. 이를 시스템 대기 모드라고 합니다. 사용자가 시계와 상호작용한 후 다음 조건 중 하나가 충족되면 앱이 다시 시작됩니다.
- 사용자 상호작용이 특정 기간 (시간 초과 전) 내에 발생합니다.
- 앱이 진행 중인 활동을 선언하고 시작했습니다.
특정 사용 사례(예: 사용자가 달리기 중에 심박수와 속도를 확인하고자 함)에서는 시스템 대기 모드에서 표시되는 항목을 제어할 수도 있습니다. 대기 모드와 대화형 모드에서 모두 실행되는 Wear OS 앱을 상시 사용 설정 앱이라고 합니다.
앱이 계속 표시되도록 하면 배터리 수명에 영향을 미치므로 앱에 이 기능을 추가할 때는 이러한 영향을 고려하세요.
프로젝트 구성
대기 모드를 지원하려면 다음 단계를 따르세요.
- 웨어러블 앱 만들기 및 실행 페이지의 구성을 기준으로 프로젝트를 만들거나 업데이트합니다.
-
(Wear OS 4 이하에서만 필요) Android 매니페스트 파일에
WAKE_LOCK
권한을 추가합니다.
<uses-permission android:name="android.permission.WAKE_LOCK" android:maxSdkVersion="33"/>
상시 사용 설정 모드 켜기
Wear OS 6부터 targetSdkVersion
가 36 이상으로 설정된 앱은 기본적으로 상시 사용 설정됩니다.
이러한 앱은 구성 없이 시스템 화면 보호 모드 중에 제한된 시간 동안 계속 표시됩니다.
앱의 targetSdkVersion
가 36보다 낮거나 앱이 Wear OS 5 이하에서 실행되어야 하는 경우 AmbientLifecycleObserver
클래스를 사용하여 앱을 상시 사용 설정합니다.
AmbientLifecycleObserver 클래스를 사용하여 대기 모드 이벤트에 반응
앱에서
AmbientLifecycleObserver
클래스를 사용하여 대기 모드 이벤트에 직접 반응할 수도 있습니다.
-
다음 예와 같이
AmbientLifecycleObserver.AmbientLifecycleCallback
인터페이스를 구현합니다. 이 단계에서는 메서드가 비어 있지만 이 가이드의 후반부에서는 대기 모드 시작 및 종료를 위해 시각화에 적용해야 하는 변경사항을 자세히 설명합니다.Kotlin
val ambientCallback = object : AmbientLifecycleObserver.AmbientLifecycleCallback { override fun onEnterAmbient(ambientDetails: AmbientLifecycleObserver.AmbientDetails) { // ... Called when moving from interactive mode into ambient mode. } override fun onExitAmbient() { // ... Called when leaving ambient mode, back into interactive mode. } override fun onUpdateAmbient() { // ... Called by the system in order to allow the app to periodically // update the display while in ambient mode. Typically the system will // call this every 60 seconds. } }
-
AmbientLifecycleObserver
를 만들고 관찰자를 등록합니다. 일반적으로 이는 Wear OS용 Compose를 사용하는 경우 활동의 수명 주기 전체에 걸쳐 상시 사용 설정 동작이 사용 설정되도록onCreate()
또는 최상위 컴포저블에서 사용합니다.Kotlin
private val ambientObserver = AmbientLifecycleObserver(activity, callback) override fun onCreate(savedInstanceState: Bundle) { super.onCreate(savedInstanceState) lifecycle.addObserver(observer) // ... }
- 상시 사용 설정 동작이 더 이상 필요하지 않으면
removeObserver()
를 호출하여 관찰자를 삭제합니다. 예를 들어 활동의onDestroy()
메서드에서 이 메서드를 호출할 수 있습니다.
TimeText 위젯을 사용하여 시간 텍스트 업데이트
Wear OS 6부터 TimeText
위젯이 대기 모드를 인식합니다. 앱이 대기 모드에서 1분마다 시간 텍스트만 업데이트하면 AmbientLifecycleObserver
를 사용하지 않고 TimeText
위젯을 사용하면 됩니다.
상시 사용 설정 앱이 백그라운드로 이동할 수 있음
Wear OS 5부터 시스템은 상시 사용 설정 앱이 일정 시간 동안 대기 모드에 표시된 후 백그라운드로 이동합니다. 사용자는 시스템 설정에서 제한 시간을 구성할 수 있습니다.
상시 실행 앱에서 음악 재생이나 운동 세션과 같은 진행 중인 사용자 작업에 관한 정보를 표시하는 경우 작업이 끝날 때까지 진행 중인 활동을 계속 표시하는 것이 좋습니다. 이렇게 하려면 진행 중인 활동 API를 사용하여 상시 실행 활동에 연결된 진행 중인 알림을 게시합니다.
시스템이 진행 중인 활동을 인식하려면 진행 중인 알림의 터치 인텐트가 상시 사용 설정된 활동을 가리켜야 합니다(다음 코드 스니펫 참고).
// Create a pending intent that point to your always-on activity
val touchIntent =
PendingIntent.getActivity(
context,
0,
Intent(context, MyAlwaysOnActivity::class.java),
PendingIntent.FLAG_MUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
)
val notificationBuilder =
NotificationCompat.Builder(this, CHANNEL_ID)
// ...
.setOngoing(true)
val ongoingActivity =
OngoingActivity.Builder(
applicationContext, NOTIFICATION_ID, notificationBuilder
)
// ...
.setTouchIntent(touchIntent)
.build()
ongoingActivity.apply(applicationContext)
notificationManager.notify(
NOTIFICATION_ID,
notificationBuilder.build()
)
대기 모드의 사용자 환경 수정
기본적으로 상시 사용 설정을 구현할 때는 시계가 대기 모드로 전환되어도 화면의 모양이 변경되지 않습니다. AmbientLifecycleCallback
의 메서드를 재정의하여 이 동작을 수정할 수 있습니다.
전원을 절약하려면 다음 단계를 따르세요.
- 더 적은 픽셀을 비춥니다. 대기 모드에서는 중요한 정보만 표시하고 사용자가 대화형 모드로 전환될 때 세부정보를 제공하는 것이 좋습니다.
- 화면의 85% 이상을 검은색으로 유지하고, 채우기를 삭제하고, 버튼과 대형 아이콘에는 윤곽선을 사용합니다.
- 기능이 없는 브랜딩 및 배경 이미지와 같은 불필요한 정보는 표시하지 마세요.
- 활성 모드와 상시 사용 모드에서 요소를 동일한 위치에 유지하고 항상 시간을 표시합니다.
- 업데이트 빈도가 낮도록 콘텐츠를 조정합니다. 예를 들어 타이머를 가장 가까운 초 단위 대신 가장 가까운 분 단위로 표시합니다.
- 거리나 시간과 같이 자주 업데이트되는 영숫자 콘텐츠의 자리표시자 UI를 삭제하거나 표시합니다.
- 카운트다운 링 및 미디어 세션과 같이 자주 업데이트되는 진행률 표시기를 삭제합니다.
- 상시 사용 모드로 전환할 때 사용자가 이전에 앱의 구성 또는 설정 화면에 있었던 경우 앱에 더 관련성 높은 화면을 표시하는 것이 좋습니다.
onEnterAmbient()
에 전달된AmbientDetails
객체에서 다음을 실행합니다.deviceHasLowBitAmbient
가 설정되면 가능한 경우 앤티앨리어싱을 중지합니다.burnInProtectionRequired
가 설정된 경우 시각화를 주기적으로 이동하고 흰색으로 채워진 영역은 피합니다.
- 대기 모드 중에 연속 애니메이션을 실행하지 마세요. Wear OS 5.1부터 애니메이터가 대기 모드 중에 실행을 중지할 수 있습니다.
중단 없는 디스플레이를 위한 체크리스트
기기가 여러 상태를 이동할 때 디스플레이를 최대한 제어해야 하는 경우가 있습니다. 예를 들어 운동 앱에서 운동 중에 시계 화면이 디스플레이에 표시되지 않도록 하려는 경우가 여기에 해당합니다. 이 경우 다음 단계를 따르세요.
- AmbientLifecycleObserver.AmbientLifecycleCallback 인터페이스를 구현합니다.
- 기기가 시스템 화면 보호 모드일 때 사용할 새로운 저전력 레이아웃을 만듭니다.
- 운동 기간 동안 진행 중인 활동을 구현합니다.
이를 실행하는 방법의 예는 GitHub의 Compose 기반
연습 샘플을 확인하세요. 이 샘플은 Horologist 라이브러리의 AmbientAware
컴포저블을 사용합니다.