2016-09-17 4 views
0

ActivityRecognition API를 사용하여 백그라운드에서 사용자 활동을 추적하는 앱을 만들고 사용자가 지정된 시간 (예 : 1 시간) 동안 같은 장소에 있으면 시스템이 사용자에게 알림을 보냅니다 산책을. 나는 액티비티 인식을 구현했지만 앱이 열리는 경우에만 해당됩니다. 분명히 Google API 클라이언트는 활동 업데이트를 보내려면 계속 연결해야합니다. 내 질문은 - 배경에서 활동을 추적 할 때 더 좋은 해결책은 무엇입니까?백그라운드에서 활동 인식

1) 30 초 안에 활동을 일시 중단 한 주 활동 (또는 개별 활동)에 AlarmManager를 구현하려면 Google API 클라이언트를 Play에 연결하십시오. 그런 다음 활동 분석을 위해 PendingIntent를 IntentService로 보냅니다.

2) API 클라이언트를 계속 연결하고 IntentService에 활동 업데이트를 보내기 위해 백그라운드 (개별 스레드)에서 계속 실행되도록 IntentService가 아닌 별도의 서비스를 만듭니다. 따라서 시스템에는 2 가지 서비스가 있습니다. 1) API 클라이언트를 Play 서비스에 연결하여 분석을 위해 IntentService에 정기적 인 활동 업데이트를 보내는 서비스. 2) IntentService는 서비스 형태로 활동 업데이트를 수신하고 데이터를 분석합니다.

3)들에 의해 제공되는 다른 어떤 솔루션()

댓글 : 내 교사 날 알람 관리기를 사용하도록 제안,하지만 당신은 일반적으로 네트워크 업데이트와 같은 것들에 대한 사용은, 따라서 간격은 일반적으로 10 분 이상 반면입니다 30 초 ~ 1 분이 필요합니다. 그래서 나는 그것을 사용하는 것을 주저합니다.

나는 또한 이전에 많은 비슷한 질문을 보았지만 명확한 답을 찾지 못했습니다. 당신이 활동 업데이트를받을 연결된 GoogleApiClient 필요하지 않습니다 -

+0

지오 펜스 사용을 고려하거나 가속도계를 와키 록으로 모니터링 했습니까? – Veener

+0

비슷한 질문 http://stackoverflow.com/questions/28380527/detect-phone-movement-when-screen-is-off – Veener

답변

3

사실, 연결된 GoogleApiClient은 요청 및 활동 업데이트를 제거하기 위해 필요합니다.

requestActivityUpdates() documentation 실제로 구체적으로 백그라운드에서 작업 언급한다 :

일반적인 사용 사례는 응용 프로그램이 백그라운드에서 활동을 모니터링하고 특정 활동이 감지 될 때 작업을 수행하고자하는 것입니다. 백그라운드 소모 리소스에서 항상 켜져있는 서비스를 필요로하지 않고이를 수행하기 위해 탐지 된 활동은 의도를 통해 전달됩니다. 응용 프로그램은 활동이 감지 될 때 인 텐트와 함께 호출 될 PendingIntent 콜백 (일반적으로 IntentService)을 지정합니다. 의도 수신자는 extractResult(android.content.Intent)을 사용하여 ActivityRecognitionResult을 추출 할 수 있습니다. 자세한 내용은 PendingIntent의 설명서를 참조하십시오.

+0

Google Client를 주 활동에 연결하고 거기에서 PendingIntents를 계속 보내는 방법을 구현하는 경우 IntentService에 활동 데이터가있는 경우 주요 활동 자체가 삭제 된 후에도 계속 IntentService로 데이터를 전송합니다.또한 데이터 수신자는 어떤 브로드 캐스트 리시버의 정상적인 활동으로 구현되어야합니까? 아니면 IntentService 자체에서 결과를 추출해야합니까? 죄송합니다. 비슷한 문제와 관련하여 스택 오버플로에 대한 게시물을 너무 많이 읽었습니다. 다양한 답변으로이 시점에서 저를 정말로 혼란에 빠지게했습니다. – Gideon

+0

@ 기디언 - 네가 주요 활동이 파괴 된 후에도 활동 업데이트를 계속받을 것이다. 문서에서 조언하고'IntentService'에서'extractResult'를 사용하는 것은 대다수의 시간에 올바른 선택이 될 것입니다. – ianhanniballake

+0

클라이언트 객체를 만들고 활동 업데이트를 요청한 후 하나 더 질문하면 클라이언트 객체를 파기하고 다시 액티비티 업데이트를 제거하기 위해 앱을 종료하면 우리가 생성하여 시스템에 제공하는 새 클라이언트 객체가 remove activity updates 메소드는 업데이트를 요청하기 위해 생성 한 것과 동일한 객체 여야합니다. 즉, 클라이언트 객체가 특정 클라이언트 객체에 대한 업데이트를 제거 할 수 있도록 일종의 id가 있어야합니다. 또는 우리가 클라이언트 개체를 제공하는 한 시스템에 문제가되지 않습니까? – Gideon

0

다른 접근 방법을 권하고 싶습니다. Google 활동 인식 API의 문제는 자신감 수준이 75 이상이 될 때까지 특정 이벤트를보고 할 수 없다는 것입니다. 신뢰 수준이> 75 이상일 경우 검색 수준을 높여야하므로 많은 배터리가 소모 될 수 있습니다. Atooma, tranql 또는 Neura와 같은 무료 SDK (온라인으로 찾을 수 있음)를 사용해 보는 것이 좋습니다. 이것들은 사용자에 대한 통찰력을 높이고 경우에 따라 배터리 수명의 약 1 % 만 사용합니다.

관련 문제