상시 사용 설정 앱 및 시스템 대기 모드

Wear OS는 사용자가 시계를 더 이상 사용하지 않을 때 활성 앱을 저전력 모드로 자동 전환합니다. 이를 시스템 대기 모드라고 합니다. 사용자가 Wear OS는 사용자가 앱을 다시 실행하려고 할 때 볼 수 있습니다

특정 사용 사례(예: 사용자가 달리기 중에 심박수와 속도를 확인하고자 함)에서는 저전력 대기 모드에서 표시되는 항목을 제어할 수도 있습니다. 다음을 실행하는 Wear OS 앱 대기 모드와 대화형 모드 모두 상시 사용 설정 앱이라고 합니다.

앱이 계속 표시되도록 하면 배터리 수명에 영향을 미치므로 앱을 추가할 때 해당 영향을 고려하세요. 이 기능을 앱에 추가해야 합니다.

프로젝트 구성

대기 모드를 지원하려면 다음 단계를 따르세요.

  1. 웨어러블 앱 만들기 및 실행 페이지의 구성을 기준으로 프로젝트를 만들거나 업데이트합니다.
  2. Android 매니페스트 파일에 WAKE_LOCK 권한을 추가합니다.
<uses-permission android:name="android.permission.WAKE_LOCK" />

상시 사용 설정 모드 켜기

AmbientLifecycleObserver 클래스를 사용하려면 다음 단계를 따르세요.

  1. 를 구현합니다. 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.
        }
    }
  2. AmbientLifecycleObserver를 만들고 관찰자를 등록합니다. 일반적으로 이는 Wear OS용 Compose를 사용하는 경우 활동의 수명 주기 전체에 걸쳐 상시 사용 설정 동작이 사용 설정되도록 onCreate() 또는 최상위 컴포저블에서 사용합니다.

    Kotlin

    private val ambientObserver = AmbientLifecycleObserver(activity, callback)
    
    override fun onCreate(savedInstanceState: Bundle) {
      super.onCreate(savedInstanceState)
      lifecycle.addObserver(observer)
    
      // ...
    }
    
  3. 상시 사용 설정 시 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를 사용할 때 다음 콜백 메서드를 사용하는 것이 좋습니다. state를 업데이트하여 시스템에서 UI를 적절하게 조정하는 것이 좋습니다.

이를 실행하는 방법의 예는 GitHub의 Compose 기반 연습 샘플을 확인하세요. 이 샘플은 Horologist 라이브러리의 AmbientAware 컴포저블을 사용합니다.