2016-08-22 4 views
1

내 시나리오는 서비스가 주기적으로 일부 정보 (예 : 사용자 위치)를 얻고 내 서버에보고하고 위치가 일부 X 위치와 일치하면 푸시 알림을 수신하도록하려는 것입니다.백그라운드 서비스에서 GoogleAPIClient 사용

응용 프로그램이 실행 중인지 여부에 관계없이 주기적으로 위치 정보를 검색하는 가장 좋은 방법이 무엇인지에 대한 조언을 얻으 려합니다. 다음은 내가 생각한 옵션과 각각의 배경 정보입니다.

는 표준 안드로이드 서비스

내 첫번째 생각을 만들기 위치 업데이트를 얻을 것이다 위치가 수신되면,이 서버로 전송하는 GoogleAPIClient을 초기화한다 STICKY 서비스를 만드는 것이 었습니다. 이 접근법에서 가지고있는 문제는 주기적으로 위치 정보를 얻어야한다는 것입니다. 따라서 위치 검색을 실행하지 않고 있어도 서비스가 계속 실행됩니다. 또한 서비스 내에서 위치를 자주 폴링하는 가장 좋은 방법은 무엇일까요? IntentService

나는 알람 관리자 웨이크 업 갖는 (GoogleAPIClient를 통해) 위치 업데이트를 시작하는 IntentService을 시작했다 생각 두 번째 옵션으로 알람을 만들기

. 위치를 얻은 후 서버로 보내고 위치 업데이트를 닫습니다. 이렇게하면 위치 업데이트를 주기적으로 시작/중지하는 문제가 해결됩니다. 그러나 IntentService 내에서 GoogleAPIClient에 연결하는 데 많은 시간이 걸리지 않았으며 가장 효율적이라고 생각하지 않습니다. GcmTaskService

이것은 알람 관리기의 많은 장점을 가지고 있으며, 그것은 단지 서비스를 깰로 전화가이처럼 보였다 있도록 유지 관리 모드에있을 때마다 졸다 모드의 측면에서 더 효율적인 것으로 보인다 만들기

좋은 해결책. 그러나 IntentionService와 동일한 문제가있어 GoogleAPIClient에 연결하여 잠시 기다리지 않고 위치를 가져옵니다.

나는이 토끼 구멍에서 너무 멀리 떨어져 있을지도 모릅니다. 그래서 내가 놓친 부분이있을 수 있습니다. 따라서 어떤 조언을 주시면 감사하겠습니다.

답변

0

같은 문제가있었습니다. 나는 첫 번째 접근 (끈적 거리는 서비스)에 나섰고 모든 것이 잘 작동했다. 그러나 나는 서비스가 항상 실행 중이며 사용자가 볼 수 있다는 사실을 좋아하지 않았습니다. 그래서 JobScheduler API를 docs에 따라 백그라운드 작업을 수행하는 기본 방법으로 사용하기로 결정한 것입니다.

앱이 API> = 21을 목표로한다면 JobScheduler가 좋습니다. 이전 버전의 플랫폼을 지원하려면 최근에 소개 된 Firebase JobDispatcher 라이브러리를 사용해야합니다.이 라이브러리는 설명서가 부족합니다.

Google I/O 2016 프리젠 테이션에서 모든 것이 here으로 설명됩니다. 그것을 한번보세요.

+0

그게 내가 생각한거야. JobScheduler 내에서 GoogleAPI 클라이언트에 어떻게 연결 했습니까? blockingConnect를 타임 아웃이나 다른 방법으로 사용 하시겠습니까? – pkramaric

+0

비 차단 [connect()] (https://developers.google.com/android/reference/com/google/android/gms/common/api/GoogleApiClient.html#connect()) 메소드를 사용하고 연결 결과에 따라 작업을 처리하십시오 (onConnected, onConnectionFailed 메소드). – kws

0

업데이트를 요청하면 최대 빈도를 요청할 수 있습니다. 서비스를 사용하고 최대 빈도를 원하는 폴링 간격과 같게 설정하면됩니다. AlarmManager가 필요하지 않습니다.

+0

필자는 최대 주파수가 몇 시간 간격으로 (사용자가 정의한 경우) 가장 효율적인 방법인지 확실하지 않았다고 생각했습니다. 아마도 FusedLocationApi를 시작/중지하는 것이 더 효율적이라고 생각했습니다. – pkramaric

관련 문제