Вопрос по locationmanager, service, background, alarmmanager, android – Android: периодически отправляйте данные о местоположении в фоновом режиме (каждые 30 секунд) и запрашивайте новые данные у сервера

4

Сценарий:

Публикация на сервере для получения новых данных в фоновом режиме каждые 30 секунд в течение длительного периода времени, то есть 12 часов. Данные о местоположении должны быть отправлены вместе с этим.

Текущая реализация;

Класс обслуживания;

Слушатель местоположения с интервалом 30 секунд, который устанавливает долготу и значения широты для двух локальных переменныхДиспетчер тревог срабатывает в ожидании намерения каждые 30 секунд для приемника вещания.Приемник широковещания запускает IntentService с переменными местоположения в дополнениях.Http IntentService публикует местоположение и запрашивает новые данные с сервера.

IntentService отправляет ответ сервера обратно в основной класс обслуживания через широковещательный приемник.

Сервисный класс start_sticky для обеспечения перезагрузки ОС.

Я пробовал несколько разных вариантов, я

Мы пытались использовать обработчик и запускать для обработки механизма синхронизации для отправки на сервер, однако, время postDelay изменилось с 2 минут до 7 минут, когда устройство спит.

Кроме того, попытался запустить IntentService непосредственно из диспетчера аварийных сигналов, но не смог изменить дополнения PendingIntent с самыми последними переменными местоположения.

Вопросы;

Является ли текущая реализация подходом?

Будет ли гуглС маршрутом GCM будет намного выгоднее?

Как вы можете энергично протестировать класс обслуживания, особенно в отношении восстановления из ОС, убивающей его?

Заранее спасибо.

Ваш Ответ

1   ответ
1

Чтобы ОС не убивала ваш сервис, вы должны уведомить пользователя о том, что ваш сервис является постоянным сервисом, как описано вhttp://developer.android.com/guide/components/services.html#Foreground.

Мне удалось запустить мой сервис каждые 2 минуты в фоновом режиме, используя AlarmManager и WakeLock, как описано вэтот ответ, Даже когда устройство находится в спящем режиме, оно запускается каждые 2 минуты. Просто установите Будильник, чтобы повторить как

alarmMgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()+5000, 60000 * ALARM_PERIOD_IN_MINUTES, alarmPendingIntent);

вместо того, чтобы установить время.

Похожие вопросы