Мой сценарий заключается в том, что я хотел бы, чтобы служба периодически получала некоторую информацию (например, местоположение пользователя), сообщала об этом на моем сервере и получала push-уведомление, если местоположение соответствует некоторому местоположению X.Использование GoogleAPIClient в фоновых службах
Я хотел бы получить совет относительно того, что было бы лучшим механизмом для периодического получения информации о местоположении независимо от того, работает ли приложение или нет. Вот варианты, о которых я подумал, и некоторую справочную информацию по каждому из них.
Создание стандартной Android Service
Моя первая мысль была создать КЛЕЙКУЮ службу, которая инициализирует GoogleApiClient, который будет получать обновления местоположения и когда местоположение получен, он будет посылать его на сервер. Проблема с этим подходом заключается в том, что мне приходится периодически получать информацию о местоположении. Таким образом, служба будет работать постоянно, даже если она не запускает сканирование местоположения. И что будет лучшим способом опроса для местоположения так часто в рамках сервиса?
Создание сигнализации с IntentService
Второй вариант я думал только о том, имея поминки Alarm Manager, и запустить IntentService, который начинается геоданных (через GoogleApiClient). После получения местоположения отправьте на сервер и закройте обновления местоположения. Это позволит решить проблему периодического запуска/остановки обновлений местоположения. Однако мне не очень повезло подключиться к GoogleAPIClient в IntentService, не ожидая, и я не думаю, что это самая эффективная вещь.
Создание GcmTaskService
Это имеет много преимуществ AlarmManager и представляется более эффективным с точки зрения спящем режиме, как это только пробуждается службы всякий раз, когда телефон находится в режиме технического обслуживания, так что казалось, хорошее решение. Однако у меня та же проблема, что и IntentService, которая подключается к GoogleAPIClient, чтобы получить местоположение без какого-либо ожидания.
Я могу зайти слишком далеко вниз по кроличьей дыре на этом, и может быть что-то очевидное, я пропал без вести, поэтому любой совет будет очень признателен.
Я так думал. Как вы связались с подключением к GoogleAPIClient в своем JobScheduler? Использование blockingConnect с тайм-аутом или другим способом? – pkramaric
Я использую метод non-блокировки [connect()] (https://developers.google.com/android/reference/com/google/android/gms/common/api/GoogleApiClient.html#connect()), а затем я обрабатывать задание в зависимости от результата соединения (методы onConnected, onConnectionFailed). – kws