마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

하루 동안의 걸음 수 저장

0 추천
오늘 하루 동안 걸은 수를 얻기 위해서 생각한 아이디어 입니다.

 

SensorEventListener을 이용해서 센서를 작동시키고

TYPE_STEP_COUNTER을 이용해서 센서가 작동할 때 마다 앱이 켜지고 나서 현재까지 걸음 수를 리턴 받습니다.

다만 휴대폰이 켜지고 나서 지금까지의 전체 걸음 수라서 하루 동안의 걸음 수가 아니기에 밤 12시가 되면

AlarmManager을 이용해서 매일 밤 12시에 걸음 수 전체를 저장하려고 했습니다.

그러고 나면 그 후엔 현재 걸음수 - 저장한 걸음 수를 하게 되면 그 하루동안의 걸음 수를 카운터 할 수 있을 것이라 생각했습니다.

 

하지만 설계를 하다보니 알게되더군요. 이 방식으로는 안된다고 말이죠. 그 이유는 센서는 결국 센서가 작동될 정도의 움직임이 디바이스에 있어야 합니다. 그 움직임이 있을 때 걸음 수를 받을 수 있으니까요. 그런데 밤 12시에 휴대폰을 가만히 둔 상태로 있다면 AlarmManager가 작동한다고 해도 SensorEventListener가 작동 중이지 않으니 결국 걸음 수를 받을 수 없다는 결론이 나왔습니다.

 

그렇다고 해서 폰이 켜져 있는 동안 계속 백그라운드에서 만보기를 체크하게 하자니 이건 너무 배터리 소모나 이런게 클꺼 같고 어떤 방법이 없을까요? 찾아보니까 안드로이드 피스니스 api나 삼성 헬스 api가 있긴 하던데 이런 api를 이용하는 방법 말고는 없는지 질문합니다.
키리링 (730 포인트) 님이 2022년 9월 23일 질문

1개의 답변

0 추천
아래처럼 구조를 가져가시면 어떨까요?

SensorManager에서 해당 이벤트가 발생할 때마다 리턴되는 스텝수를 읽어서 앱에 저장소(파일, SharedPreferences or DB)에 저장하세요 어제까지의 총 스텝수와 현재까지의 총 스텝수 두가지를 저장하고 12시에 스케쥴링을 통해 서비스를 구동하게 하면 SensorManager에 접근하지 않더라도 님에 앱에 저장해 놓은 데이터를 가지고도 하루 동안의 스텝수의 계산이 가능할 것 같아 보이는데요. 오늘의 스텝수를 계산하고 나면 어제까지의 총 스텝수를 업데이트하고 현재까지의 스텝수는 0로 만들어 주거나하는 방식으로 하면 구현이 가능할것 같아 보이는데요.
spark (188,520 포인트) 님이 2022년 9월 24일 답변
spark님이 2022년 9월 24일 수정
저도 처음엔 그렇게 생각을 했었습니다. 그런데 잘 생각해보니까 앱을 실행 중일 때, 예를 들어 밤 10시에는 총 1000걸음이었는데 이때는 앱을 실행 중 이었기 때문에 db에 1000걸음이 저장됬습니다. 그러나 그 후 앱을 실행을 중지 했고 11시에 100걸음을 더 걸었습니다. AlarmManager을 통해 밤 12시에 걸음수를 저장하게끔 했습니다. 그러면 1000걸음이 어제의 걸음 수로 저장되는거지 않습니까?
먼저 제가 SensorManager에 대해서는 잘 모릅니다.
백그라운드 서비스나 BroadCastReceiver로 SensorManager이벤트를 받을 수 없다면 원하시는 기능을 구현할 수 있나요? 삼성이나 Google fit같은 앱을 보면 앱을 실행하지 않더라도 센서가 동작을 할 때 백그라운드에서 동작을 하는 것 처럼 보이던데요.  이런 식으로 되어야 하하지 않나 해서요. 아니면, 스텝수를 구할 수 있는 API가 제공이 되어야만 할 것 같은데요. 다음 링크를 한번 확인해 보시죠.
https://itnext.io/android-step-counter-sensor-all-in-one-77564e5b6c2a
...