키워드: wear,ambient,alwayson
Wear OS는 사용자가 시계를 더 이상 사용하지 않을 때 활성 앱을 저전력 모드로 자동 전환합니다. 이를 시스템 대기 모드라고 합니다. 사용자가 특정 시간 내에 시계와 다시 상호작용하면 Wear OS는 사용자가 중단한 앱을 다시 표시합니다.
특정 사용 사례(예: 사용자가 달리기 중에 심박수와 속도를 확인하고자 함)에서는 저전력 대기 모드에서 표시되는 항목을 제어할 수도 있습니다. 대기 모드와 대화형 모드에서 모두 실행되는 Wear OS 앱을 상시 사용 설정 앱이라고 합니다.
앱이 계속 표시되도록 하면 배터리 수명에 영향을 미치므로 앱에 이 기능을 추가할 때는 이러한 영향을 고려하세요.
프로젝트 구성
대기 모드를 지원하려면 다음 단계를 따르세요.
- 웨어러블 앱 만들기 및 실행 페이지의 구성을 기준으로 프로젝트를 만들거나 업데이트합니다.
- Android 매니페스트 파일에
WAKE_LOCK
권한을 추가합니다.
<uses-permission android:name="android.permission.WAKE_LOCK" />
상시 사용 설정 모드 켜기
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()
메서드에서 이 메서드를 호출할 수 있습니다.
상시 사용 설정 앱이 백그라운드로 이동할 수 있음
Wear OS 5부터 시스템은 상시 사용 설정 앱이 일정 시간 동안 대기 모드에 표시된 후 백그라운드로 이동합니다. 사용자는 시스템 설정에서 시간 제한을 구성할 수 있습니다.
상시 실행 앱에서 음악 재생이나 운동 세션과 같은 진행 중인 사용자 작업에 관한 정보를 표시하는 경우 작업이 끝날 때까지 진행 중인 활동을 계속 표시하는 것이 좋습니다. 이렇게 하려면 Ongoing Activity 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
의 메서드를 재정의하여 이 동작을 수정할 수 있습니다.
전원을 절약하려면 다음 단계를 따르세요.
- 더 적은 픽셀을 비추고 화면 대부분을 검은색으로 둡니다. 대기 모드에서는 중요한 정보만 표시하고 사용자가 대화형 모드로 전환될 때 세부정보를 제공하는 것이 좋습니다.
- 업데이트 빈도가 낮도록 콘텐츠를 조정합니다. 예를 들어 타이머를 가장 가까운 초 단위 대신 가장 가까운 분 단위로 표시합니다.
onEnterAmbient()
에 전달된AmbientDetails
객체에서 다음을 실행합니다.deviceHasLowBitAmbient
가 설정되면 가능한 경우 앤티앨리어싱을 중지합니다.burnInProtectionRequired
가 설정된 경우 시각화를 주기적으로 이동하고 흰색으로 채워진 영역은 피합니다.
Wear OS용 Compose를 사용할 때는 이러한 콜백 메서드를 사용하여 상태를 업데이트하는 것이 좋습니다. 그러면 시스템이 UI를 적절하게 재구성할 수 있습니다.
이를 실행하는 방법의 예는 GitHub의 Compose 기반
연습 샘플을 확인하세요. 이 샘플은 Horologist 라이브러리의 AmbientAware
컴포저블을 사용합니다.