[Android] TYPE_STEP_COUNTER

김영진·2021년 9월 10일
0

Flutter Pedometer

목록 보기
3/3
post-custom-banner

목적

플러터를 이용해 만보계를 구현하는 도중 의문점이 생겨서 TYPE_STEP_COUNTER 관련해 리서치를 하다 읽어볼만한 글이 있어 읽어보려고 한다.

내용

TYPE_STEP_COUNTER

읽어보니 핸드폰이 켜진 순간부터 현재까지 누적된 카운트를 보여준다고 한다.
따라서 서비스를 이용한 백그라운드 앱실행을 하면서 센서 수치가 측정될때마다 측정할 필요는 없다. 센서가 자동으로 누적되기 때문에

다른 특징으로는 핸드폰을 껏다가 다시키면 수치가 0으로 초기화 된다.

다만 하루치의 걸음 수를 측정하려면 계산이 필요하다... 그랫군,,,

계산하는 방법

  1. 앱이 실행되면 현재 센서 수치를 저장한다. previousStep
  2. 00시 or 23시 59분에 센서 수치를 한번더 측정한다. currentStep
  3. 현재 수치에서 저장한 수치를 뺀다. todayStep
  4. 현재 수치를 다시 저장한다. previousStep = currentStep
  5. 2~4번을 반복한다.

TYPE_STEP_DETECTOR

리턴값이 늘 1인 센서다.
TYPE_STEP_COUNTER처럼 자동으로 누적되는 수치가 아닌 개발자가 직접 더해서 사용해야하는값

항간에서는 TYPE_STEP_DETECTOR 보다 조금 더 정확한 수치측정이 가능하다고 하나 이는 개발자마다 말이 다 달라서 모르겠다

우선 TYPE_STEP_DETECTOR의 경우 센서가 움직여서 이벤트가 감지되면 1을 리턴하며 그 값을 개발자가 계산하여 관리해야하기 때문에 서비스 등록이 반 강제로 될수밖에 없다.

이 센서를 이용해서 걸음수를 계산하려면

  1. 센서의 수치를 계속 누적으로 저장할 변수를 만든다 todayStep
  2. 센서 수치 업데이트 이벤트가 발생하면 전달 받은 수치 값을 받아 계속 더해준다.todayStep++ OR todayStep += count
  3. 00시나 23시 59분이 되면, todayStep의 누적된 값을 별도로 저장하고, 0으로 초기화 해준다
  4. 2-3번 반복

선택의 기준?

어떤 센서를 사용하여 측정할 것인지에 대한 선택의 기준을 굳이 따지자면 위에 TYPE_STEP_DETECTOR에 작성해 놓은 것 처럼 서비스를 사용하여 상단에 Notification을 계속 띄워도 되는 앱인가? 에 대한 답이 먼저 나와야 한다.

Andriod OS 8.0 (API Level 26) 부터 service를 이용한 백그라운드 앱 실행시 startForeGround를 호출하여 사용자에게 Notification을 상시로 노출해야 하는 보안 정책이 생겼다.

우회하는 방법이 있지만 추천하지 않는다.

ForegroundService를 계속 띄워도 되는 앱이라면 TYPE_STEP_DETECTOR를 사용할 수 있는 선택도 할 수 있다.

추가 권한

Android OS 10 (API LEVEL 28)부터 SensorManager를 이용하려면 ACTIVITY_RECOGNITION 권한을 런타임으로 허용받아야 센서에 대한 접근이 가능하다.

결론

이 글을 읽으니 만보계에 괴랄한 숫자가 나온게 이해가 된다.

폰을 껏다키니 토스앱(만보기기능)은 걸음수에 변화가 없었다.
센서는 초기화됐지만 아마 로컬디비를 활용해서 저장해놓은것이 아닌가 추측된다.
나도 상단에 만보계가 노출되기를 원한다. 따라서 TYPE_STEP_DETECTOR 를 활용한 만보계를 구현하면 더 좋겠다는 생각이 든다.

IOS도 한번 봐야겠다... swift가 낯선데 이해가 되었으면 좋겠다..

profile
2021.05.03) Flutter, BlockChain, Sports, StartUp
post-custom-banner

0개의 댓글