IOS с длительным фоном таймера с режимом "местоположение"

Я хочу реализовать длительный фоновый таймер, который периодически отправляет местоположение пользователя на сервер.

Для этого я устанавливаю режим location для UIBackgroundModes и вызываю beginBackgroundTaskWithExpirationHandler, когда приложение переходит в фоновый режим. И для CLLocationManager, я использую метод startUpdatingLocation (не хочу использовать значительные изменения, потому что мне нужно место высокой точности).

Но примерно через 26 минут после того, как приложение перейдет на задний план, оно перестает отправлять местоположение на сервер. Но приложение не разбилось, поэтому после того, как я принесу приложение на передний план, он может возобновить свой таймер.

26минут из экспериментов, с iOS 6.1, iPhone 5.

Вот несколько вопросов,

  • Я не могу понять, почему он приостанавливается после 26 минут не 10 минут, что известно как ограничение по времени для фоновой задачи.

  • До 16 минут методы backgroundTimeRemaining возвращают двойное максимальное значение. Но после 16 минут он уменьшается от 600, поэтому приостанавливает фоновое задание после 10 минут.

Я уже пытался вызвать beginBackgroundTaskWithExpirationHandler внутри обработчика истечения, но не использовать.

Если кто-нибудь, у кого есть ключ к этой проблеме, будет очень благодарен.

Ответ 1

https://github.com/voyage11/Location

Используйте этот код. Вы можете установить временной интервал, который вы хотите назвать. Я пробовал много кодов, но я нашел это как самую точную и наименьшую проблему с батареей. Это также потрясающе для службы определения местоположения.:)

Ответ 2

если вы успешно установили UIBackgroundModes, приложение может долго работать в фоновом режиме во время перемещения. Но, если вы перестанете двигаться более 10 минут (может быть, больше), приложение будет заблокировано системой. Ваше приложение будет бодрствовать, если местоположение будет обновлено, но это бодрствующее время будет очень коротким, поэтому вы должны beginBackgroundTaskWithExpirationHandler для обработки обновления местоположения.