Today's

길을 나서지 않으면 그 길에서 만날 수 있는 사람을 만날 수 없다

모바일 앱(안드로이드)

Wear OS Tail 기능 구현: 심박수 실시간 모니터링과 백그라운드 측정

Billcorea 2025. 8. 9. 15:23
반응형

 

 

Wear OS Tail 기능 구현: 심박수 실시간 모니터링과 백그라운드 측정

bpm 표시

 

Wear OS 앱에서 사용자의 심박수를 실시간으로 모니터링하고, 앱이 백그라운드에 있어도 안정적으로 데이터를 측정하는 Tail 기능 구현 방법을 소개합니다.


1. Tail 기능이란?

Tail 기능은 센서 데이터를 앱 실행 중뿐 아니라, 백그라운드나 화면이 꺼진 상태에서도 주기적으로 수집하고 업데이트하는 기능입니다. Wear OS 환경에서는 심박수 실시간 측정뿐 아니라 운동 중이나 일상 생활 중에도 정확한 데이터 수집을 위해 백그라운드 측정이 필수입니다.

2. Wear OS 심박수 측정 방식

  • Wear OS는 ExerciseClient API와 Health Services API를 제공합니다.
  • ExerciseClient는 운동 세션을 시작하고 심박수 데이터를 실시간 수신하는 데 사용됩니다.
  • Health Services API는 더 최신이며 다양한 헬스 데이터를 제공하지만, 일부 기기에서 제한이 있을 수 있습니다.

참고: ExerciseClient는 Wear OS 3.0 이상, 특히 갤럭시 워치4 이상에서 안정적입니다.

3. Tail 기능 구현 핵심 포인트

1) 실시간 심박수 측정 및 UI 표시

ExerciseClientExerciseUpdateListener를 통해 심박수 데이터를 실시간으로 받아 처리하고, 앱 UI에 심박수, 운동 시간, 칼로리 소모량 등을 동적으로 표시합니다.

2) 백그라운드 측정 유지

워치 화면이 꺼져도 데이터를 측정하려면 Foreground Service를 사용해야 합니다. 백그라운드 작업 제약이 있는 Wear OS 환경을 고려해 Foreground Service에 적절한 알림을 표시하여 측정을 지속시킵니다. 권한 설정(예: BODY_SENSORS_BACKGROUND)도 중요합니다.

3) Tile 업데이트 연동

Wear OS Tile에 최신 심박수, 운동 시간 등의 정보를 주기적으로 업데이트합니다. TileUpdateRequester를 활용해 앱 내에서 데이터 변동 시 Tile 업데이트를 트리거할 수 있습니다.

4. 주요 코드 예시

ExerciseClient 초기화 및 심박수 데이터 수신

val exerciseClient = ExerciseClient(context)

val exerciseConfig = ExerciseConfig.builder(ExerciseType.WALKING)
    .build()

exerciseClient.startExercise(exerciseConfig)

val listener = object : ExerciseUpdateListener {
    override fun onExerciseUpdate(update: ExerciseUpdate) {
        val bpm = update.bpm
        val calories = update.calories
        val duration = update.duration

        // UI 업데이트 및 Tile 갱신 처리
        updateUi(bpm, calories, duration)
        requestTileUpdate()
    }
}

exerciseClient.registerExerciseUpdateCallback(listener)

Foreground Service 알림 설정 예시

val notification = NotificationCompat.Builder(context, CHANNEL_ID)
    .setContentTitle("운동 중")
    .setContentText("심박수 측정 중")
    .setSmallIcon(R.drawable.ic_heart)
    .build()

startForeground(SERVICE_ID, notification)

5. 권한 설정 예시 (AndroidManifest.xml)

<uses-permission android:name="android.permission.BODY_SENSORS" />
<uses-permission android:name="android.permission.BODY_SENSORS_BACKGROUND" />  <!-- Wear OS 3.5 이상 필요 -->

6. 마무리

Wear OS에서 Tail 기능을 구현하면 운동 중 뿐 아니라 평소에도 사용자의 심박수와 운동 정보를 꼼꼼하게 기록할 수 있습니다. ExerciseClient를 이용한 실시간 심박수 모니터링과 백그라운드 Foreground Service, 그리고 Tile 업데이트 연동이 핵심입니다.

향후 Wear OS 기반 건강 관리 앱 개발 시 꼭 고려해야 할 필수 기능입니다.


 

반응형