본문 바로가기
Android

Real Time Activity

by mangstory 2021. 3. 4.

걷기, 달리기, 자전거타기 등 일상생활의 활동들을 앱을 통해 실시간으로 감지할 수 있다!

이를 위해 구글에서 제공하는 Activity Recognition Transition API를 사용하겠다.

 

먼저 구글에서 제공하는 서비스를 사용하기 위해 build.gradle(module)에 아래와 같은 코드를 작성해준다.

또한 매니페스트 파일에도 Activity Recognition Transition API 사용을 위해 권한 지정을 해준다.

 

이제 클래스 하나를 만들어 움직임을 감지하는 서비스를 구현하겠다.

 

 

IntentService를 상속받아 비동기적으로 처리가 가능하게끔 해준다.

 

 

여기서..! 왜 다른 서비스가 아닌 IntentService를 사용하였을까? 

 

아직 비동기처리에 대한 개념이 제대로 확립되지 않아 공부를 더 한 후 각종 비동기처리 시스템에 대해 포스팅해야겠다ㅎㅎ

 

먼저 생성자를 만들어 이름을 넘겨준다! (왜 하는 거지?)

 

IntentService를 상속받으려면 필수로 오버라이드 해주어야하는 메소드가 있다.

 

위 함수를 오버라이드 한 뒤 활동을 감지하여 활동이 있으면 추출하는 코드를 작성해준다.

먼저 활동이 있는지 확인 후 활동이 감지되면 result객체에 결과를 추출하여 저장한다.

handleDetectedActivity라는 함수에 감지되는 모든 activity들의 리스트를 인자로 넣어준다.

 

handleDetectedActivity

전달받은 activity list를 for문을 통해 모두 확인한다.

 

각각의 활동이 감지되면 log를 띄워 어떤 활동이 감지되었는지 확인할 것이다.

 

IntentService사용하려면 매니패스트 파일에 서비스를 추가해야 컴파일 오류가 나지 않는다.

 

이제 MainActivity로 간다!

 

MainActivity에 GoogleApiClient.ConnectionCallbacks 와 GoogleApiClient.OnConnectionFailedListener를 implements 해준다.

 

구글드라이브 서비스에 연결하기 위해 GoogleApiClient.Builder 를 통해 instance를 만들고 연결해준다. (onCreate에서)

 

그리고 onConnected, onConnectionSuspended, onConnectionFailed 함수를 오버라이드 해준다.

 

onConnected함수에 인텐트를 생성하여 ActivityRecognizedService를 띄워주고

500ms마다 업데이트가 되도록 설정해준다.

 

MainActivity 전체 코드

 

이제 실행을 하고 logcat을 띄우면!

 

handleDetectedActivity를 키워드로 검색

내가 걷고 뛰는 걸 인지한다. 옆의 숫자는 정확도이다.

난 자전거 탄 적이 없는데 인식해버렸다. 그래서 정확도가 매우 낮다.

 

 

'Android' 카테고리의 다른 글

STT(Speech to text)  (1) 2021.05.20
Sensor - Gyro, Magno, Light, Pressure, Temp, Humi  (4) 2021.03.02
Sensor - Accelerometer  (3) 2021.02.25