건강시계어때 앱을 개발하면서 생각보다 많은 시간을 들인 부분이 바로 만보계 기능이었습니다.
처음에는 Android의 TYPE_STEP_COUNTER 센서를 연결하면 자연스럽게 걸음 수가 계속 들어올 것이라고 생각했습니다.
하지만 실제 사용에서는 조금 다른 현상이 나타났습니다.
다른 만보계 앱을 함께 실행할 때는 걸음 수가 바로 표시되지 않더라도 나중에 한꺼번에 반영됐는데, 다른 만보계 앱을 종료하면 건강시계어때의 걸음 수가 계속 0으로 유지되는 경우가 있었습니다.
센서를 다시 연결해도 같은 현상이 반복됐습니다.
이번 글에서는 이 문제를 어떻게 분석하고 보완했는지, 그리고 백그라운드 만보계 기능을 Google Play에 등록하면서 필요한 포그라운드 서비스 권한 선언, 시연 동영상 제작, YouTube 업로드, Play Console 등록까지 정리해 보겠습니다.
Step Counter 센서는 단순한 카운터가 아니다
건강시계어때에서는 Android의
Sensor.TYPE_STEP_COUNTER
센서를 사용합니다.
이 센서는 한 걸음마다 1을 보내주는 방식이 아닙니다.
기본적으로 마지막 재부팅 이후 센서가 활성화되어 있는 동안 누적된 걸음 수를 반환합니다. 예를 들어 센서값이 124583이라면 오늘 124,583보를 걸었다는 의미가 아니라 기기 재부팅 이후 누적 원시값입니다. Android Developers
따라서 앱에서는 다음과 같은 기준값 관리가 필요합니다.
현재 센서 원시값 : 124,583
오늘 시작 기준값 : 120,000
오늘 걸음 수
= 124,583 - 120,000
= 4,583보
또한 TYPE_STEP_COUNTER는 개별 걸음을 즉시 알려주는 TYPE_STEP_DETECTOR와 달리 다소 지연될 수 있으며, Android 문서에서는 최대 약 10초 정도의 지연이 있을 수 있다고 설명합니다. Android Developers
그래서 만보계 앱에서 걸음 수가 매걸음 즉시 올라가지 않는 것 자체는 반드시 오류라고 볼 수 없습니다.
다른 만보계가 있을 때만 동작했던 이유
문제를 분석하면서 가장 중요했던 부분은 센서 등록 유지 방식이었습니다.
기존 구조에서는 앱 화면이 활성화되었을 때 Step Counter 센서를 등록하고, 화면 상태에 따라 센서 연결이 끊어질 수 있었습니다.
Android 공식 문서에서도 장시간 걸음 수를 추적하려면 센서를 계속 활성 상태로 유지해야 하며, 센서가 비활성화되어 있으면 Step Counter가 기대한 방식으로 계속 집계되지 않을 수 있다고 설명합니다. Android Developers
다른 만보계가 같이 실행될 때는 그 앱이 센서를 계속 활성화하고 있었기 때문에 누적값이 나중에 건강시계어때에도 들어오는 것처럼 보였습니다.
하지만 다른 만보계를 종료한 후에는 건강시계어때 자체가 백그라운드에서 센서를 충분히 유지하지 못해 0보 상태가 계속되는 문제가 나타났습니다.
결국 단순히 센서 다시 연결 버튼을 추가하는 수준으로는 해결하기 어려운 구조였습니다.
해결 방법: Health Foreground Service
이번 보완에서는 만보계 구조를 Android Foreground Service 기반으로 변경했습니다.
건강시계어때가 자체적으로 센서를 계속 유지하도록 만든 것입니다.
주요 변경은 다음과 같습니다.
- health 유형 Foreground Service 추가
- TYPE_STEP_COUNTER 지속 등록
- 가능하면 Wake-up Step Counter 우선 사용
- 원시 누적값 지속 저장
- 마지막 센서 수신시간 저장
- 센서 수신 횟수 기록
- 앱 재실행 시 마지막 원시값 즉시 동기화
- 날짜 변경 시 기준값 재설정
- 장기간 미실행 후 잘못된 걸음 누적 방지
- 휴대전화 재부팅 후 서비스 재시작 처리
- 센서 완전 해제 후 재등록 기능 추가
Android 14 이상에서는 운동 추적과 같은 장시간 건강·피트니스 작업에 health Foreground Service 유형을 사용할 수 있으며, 매니페스트에 FOREGROUND_SERVICE_HEALTH를 선언해야 합니다. 또한 ACTIVITY_RECOGNITION은 health 서비스의 허용되는 런타임 조건 중 하나입니다. Android Developers
필요한 권한
건강시계어때의 만보계 기능에는 다음 권한이 핵심입니다.
<uses-permission
android:name="android.permission.ACTIVITY_RECOGNITION" />
<uses-permission
android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission
android:name="android.permission.FOREGROUND_SERVICE_HEALTH" />
서비스에는 다음과 같이 health 유형을 지정합니다.
<service
android:name=".StepTrackingForegroundService"
android:foregroundServiceType="health" />
Android는 API 34 이상에서 Foreground Service 유형을 명확히 선언하도록 요구하고 있습니다. Android Developers
사용자가 직접 측정을 시작하게 하는 것이 중요하다
Foreground Service는 아무 때나 백그라운드에서 시작하면 안 됩니다.
Android 12 이상에서는 앱이 이미 백그라운드에 있는 상태에서 Foreground Service를 새로 시작하는 것이 제한됩니다. 따라서 사용자가 앱 화면에서 걷기 기능을 활성화할 때 서비스를 시작하는 구조가 안전합니다. Android Developers
건강시계어때에서는 다음과 같은 흐름으로 구성했습니다.
사용자 걷기 메뉴 진입
↓
신체활동 권한 사용 목적 안내
↓
사용자가 걸음 측정 시작
↓
ACTIVITY_RECOGNITION 권한 확인
↓
Health Foreground Service 시작
↓
Step Counter 센서 등록
이렇게 해야 Google Play 심사에서도 사용자가 기능을 직접 시작한다는 점을 설명하기 쉽습니다.
센서 진단 정보도 추가했다
만보계 문제를 해결할 때 단순히 화면에 0보만 표시하면 원인을 찾기가 어렵습니다.
그래서 걷기 화면에 개발·점검용 센서 정보를 추가했습니다.
예를 들면 다음과 같습니다.
센서
Samsung Step Counter
제조사
Samsung
Wake-up
지원
마지막 수신
06:24:31
원시 누적값
124,583
수신 횟수
38회
이 정보가 있으면 문제를 두 가지로 나눌 수 있습니다.
원시 누적값도 증가하지 않는다
→ 센서 또는 서비스 문제
원시 누적값은 증가한다
오늘 걸음만 0이다
→ 기준값 계산 또는 저장 문제
개발 중에는 이런 진단 정보가 상당히 유용했습니다.
Google Play에서는 왜 추가 선언이 필요한가?
Foreground Service는 앱이 화면에 보이지 않는 동안에도 계속 실행될 수 있기 때문에 Google Play에서는 사용 목적을 별도로 확인합니다.
Play Console에서 FOREGROUND_SERVICE_HEALTH를 감지하면 다음과 같은 질문이 나타납니다.
앱에서 FOREGROUND_SERVICE_HEALTH 권한을
사용해야 하는 작업은 무엇인가요?
건강시계어때에서는
건강 데이터 동기화, 걸음 수 측정기, 운동 모니터링
항목을 선택했습니다.
Google Play도 운동을 모니터링하는 앱에서 health Foreground Service 유형을 사용할 수 있다고 안내하고 있습니다. 구글 도움말
Play Console 설명은 이렇게 작성했다
설명은 기능과 실제 동작이 일치하도록 작성하는 것이 중요합니다.
예를 들어 다음과 같이 작성할 수 있습니다.
건강시계어때는 사용자가 만보계 기능을 활성화한 후 앱이 백그라운드에 있는 동안에도 Step Counter 센서를 이용한 걸음 측정을 지속하기 위해 FOREGROUND_SERVICE_HEALTH 권한을 사용합니다. 측정 중에는 지속적인 포그라운드 서비스 알림이 표시됩니다.
권한을 단순히 “건강 기능에 필요합니다”라고 적는 것보다
어떤 기능에 사용하고, 왜 백그라운드 실행이 필요한지
명확하게 적는 것이 좋습니다.
심사용 동영상도 필요했다
Google Play의 Foreground Service 선언 화면에서는 실제로 이 기능이 어떻게 사용되는지를 보여주는 동영상 링크를 요구할 수 있습니다.
여기에서 다른 만보계 앱이나 일반적인 설명 영상을 제출해서는 안 됩니다.
반드시 내 앱에서 실제 Foreground Service가 동작하는 모습을 보여주는 것이 좋습니다.
건강시계어때에서는 약 30초 정도의 시연 영상을 만들었습니다.
영상 흐름은 다음과 같이 구성했습니다.
건강시계어때 실행
↓
걷기 메뉴 진입
↓
센서 상태 확인
↓
걸음 측정 시작
↓
홈 화면으로 이동
↓
실제로 걷기
↓
앱 재실행
↓
걸음 수 증가 확인
↓
알림창 열기
↓
"건강시계어때 · 걸음 측정 중"
Foreground Service 알림 확인
이 정도면 심사자가
왜 Foreground Service가 필요한지
쉽게 이해할 수 있습니다.
화면 녹화는 어떻게 했나?
최근 스마트폰 중에는 기본 화면 녹화 기능이 없는 기기도 있습니다.
기본 화면 녹화 기능이 있으면 가장 간단합니다.
빠른 설정
→ 화면 녹화
→ 앱 시연
→ 녹화 종료
기본 화면 녹화를 사용할 수 없다면 Android 개발 환경의 ADB를 이용할 수도 있습니다.
예:
adb shell screenrecord --bit-rate 8000000 /sdcard/ehealth_test.mp4
녹화를 끝낼 때는
Ctrl + C
를 누릅니다.
PC로 가져오려면:
adb pull /sdcard/ehealth_test.mp4
를 사용합니다.
개발자라면 ADB 방식도 상당히 편리합니다.
Google Play 제출용 영상은 짧게 편집했다
원본 화면 녹화에는 기다리는 시간이 들어갈 수 있습니다.
Google Play 심사자가 필요한 것은 모든 기능 소개가 아니라 해당 Foreground Service 사용 이유를 확인하는 것입니다.
따라서 영상은 약 30초 정도로 편집했습니다.
자막도 다음 정도만 넣었습니다.
건강시계어때 걷기 기능
Step Counter 센서 연결
백그라운드에서도 걸음 측정 유지
앱 복귀 후 걸음 수 갱신
Foreground Service 알림 확인
홍보 영상처럼 화려하게 만들 필요는 없습니다.
실제 앱 화면과 동작이 잘 보이는 것이 가장 중요합니다.
YouTube에 업로드하기
Google Play에는 MP4 파일 자체를 올리는 것이 아니라 영상 URL을 입력하는 방식입니다.
그래서 완성한 영상을 YouTube에 올렸습니다.
YouTube Studio 또는 YouTube 앱에서
동영상 업로드
→ 제목 입력
→ 설명 입력
→ 공개 상태 설정
순서로 진행합니다.
제목은 다음처럼 작성했습니다.
건강시계어때 - FOREGROUND_SERVICE_HEALTH 걸음 측정 기능 시연
설명에는 다음 내용을 넣었습니다.
건강시계어때 앱의 FOREGROUND_SERVICE_HEALTH 권한 사용 방법을 보여주는 Google Play 심사용 영상입니다.
사용자가 걷기 기능을 활성화하면 스마트폰 Step Counter 센서를 이용하여 걸음 수를 측정합니다.
앱이 다른 화면으로 전환된 상태에서도 걸음 측정을 유지하기 위해 Health Foreground Service를 사용하며, 측정 중에는 Android 알림 영역에 걸음 측정 알림이 표시됩니다.
공개 상태는 ‘일부 공개’
심사용 영상이라고 해서 YouTube의 비공개를 선택하면 곤란할 수 있습니다.
비공개 영상은 초대한 Google 계정만 볼 수 있기 때문입니다. 구글 도움말
따라서 Google Play 심사용 영상은 일반적으로
일부 공개
로 설정하는 것이 편리합니다.
일부 공개 영상은 검색이나 일반 채널 탐색에는 잘 노출되지 않지만 링크를 가진 사람은 볼 수 있습니다.
업로드 후에는 반드시 다른 브라우저나 로그아웃 상태에서 링크를 직접 열어보는 것이 좋습니다.
Play Console에 영상 링크 등록
YouTube 업로드가 완료되면
공유
→ 링크 복사
를 선택합니다.
그리고 Play Console의
앱 콘텐츠
→ 포그라운드 서비스 권한
→ 건강
→ 동영상 링크
입력란에 붙여넣습니다.
등록 전에 다음 세 가지를 다시 확인합니다.
- 영상이 재생되는가?
- 일부 공개 상태인가?
- 실제 앱의 Foreground Service 동작이 보이는가?
이번 작업에서 느낀 점
만보계 기능은 단순히 센서값 하나를 읽는 기능처럼 보입니다.
하지만 실제 앱으로 만들려면 생각보다 많은 부분을 함께 고려해야 했습니다.
Android Sensor
권한
날짜별 기준값
재부팅
앱 백그라운드
Foreground Service
알림
Google Play 정책
심사용 영상
특히 중요한 점은 센서값을 읽는 것과 지속적으로 만보계를 운영하는 것은 다른 문제라는 것입니다.
TYPE_STEP_COUNTER는 피트니스 앱에 적합한 저전력 센서이지만, 앱이 센서를 어떻게 등록하고 유지하는지에 따라 실제 사용자 경험이 달라집니다. Android 역시 장기간 걸음 수 추적에 이 센서를 사용할 수 있도록 제공하고 있습니다. Android Developers
마무리
건강시계어때의 만보계는 처음에는 앱을 실행했을 때만 센서를 읽는 비교적 단순한 구조였습니다.
하지만 실제 테스트에서 다른 만보계 앱이 없으면 걸음 수가 제대로 올라오지 않는 현상을 발견하면서 구조를 다시 검토하게 됐습니다.
결국
단순 센서 연결 → 지속적인 Health Foreground Service 기반 측정
방식으로 변경했습니다.
그 과정에서 Google Play에 필요한 권한 선언과 사용 설명, 실제 동작 시연 영상, YouTube 일부 공개 등록까지 함께 경험하게 됐습니다.
앱 개발에서 중요한 것은 기능을 만드는 것만이 아니라 실제 스마트폰에서 안정적으로 동작하고, 운영체제 정책과 앱스토어 정책까지 만족시키는 것이라는 점을 다시 확인했습니다.
건강시계어때도 이런 실제 테스트와 보완을 거치면서 조금씩 안정적인 앱으로 만들어가고 있습니다.
조그만 기술로 세상을 이롭게.
'조그만 기술로 세상을 이롭게 > 건강시계어때' 카테고리의 다른 글
| 건강시계어때 기능 개선 - 스마트 기기와 연동 (0) | 2026.09.26 |
|---|---|
| 스마트밴드 vs 갤럭시워치, 달리기용으로 무엇을 선택할까? (0) | 2026.09.26 |
| 🌍 UTC란 무엇인가? (0) | 2026.09.23 |
| 건강시계어때 비공개 테스트를 시작합니다 (0) | 2026.09.19 |
| 건강시계어때 개발 방법 및 주요 모듈 정리 (0) | 2026.09.19 |