Использование фоновых агентов в Windows Phone 8.1 для сохранения местоположения пользователя после сброса устройства

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

Чтобы попытаться решить эту проблему, я использовал периодическое задание из этого подхода дословно, которое работало в режиме отладки. Но так как я оставил телефон без присмотра на ночь, у меня был только один журнал для пользователя после получаса выхода из телефона. Никаких дальнейших записей не было записано (имейте в виду, что я использовал запись журнала испытаний, а не реальный сигнал GPS, что означает, что я только запускал запись простого журнала для целей тестирования).

Я что-то пропустил? Разве это не правильное решение для этой проблемы. Если да, не могли бы вы указать причину этого, поскольку я не смог найти никаких документов, в которых говорится об такого рода ограничениях.

1 ответ

ОС на WP 8.1 имеет очень строгие правила относительно того, когда фоновый агент будет работать и как долго. Раз в 30 минут согласуется с документацией MSDN здесь и с моими наблюдениями. Если ваш код написан правильно, вы должны видеть одну запись примерно каждые 30 минут. Если бы вы написали приложение для планшета для магазина, у вас было бы больше возможностей. Там поведение ОС по отношению к фоновым агентам немного более слабое (кое-что из этого не очень хорошо задокументировано). Поскольку вы ориентируетесь на Win Phone, я не буду вдаваться в подробности относительно фоновых агентов на планшете.

Я не уверен, что это будет работать для вашего случая использования, но одна вещь, которая приходит на ум, - это заставить пользователя поддерживать приложение в рабочем состоянии. Вы можете предотвратить переход телефона в состояние пониженного энергопотребления и приостановить работу своего приложения (как это делает навигационное приложение). Для этого см. PhoneApplicationService.UserIdleDetectionMode. Если вы сделаете это, убедитесь, что вы делаете экран черным (или в основном черным) и используете режим сна (await Task.Delay(...)) соответственно, чтобы сохранить батарею.

Другие вопросы по тегам