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

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

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

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


person Milos Maksimovic    schedule 30.09.2015    source источник
comment
Не могли бы вы поделиться кодом от фонового агента, пожалуйста?   -  person kernanb    schedule 01.10.2015
comment
Код точно такой же, как в примере со ссылкой, поэтому я не вставил его сюда.   -  person Milos Maksimovic    schedule 01.10.2015


Ответы (1)


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

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

person Ladi    schedule 01.10.2015
comment
Спасибо за ваш ответ, и я просмотрел эти ссылки, однако моя проблема заключается в том, что после перезагрузки устройства вызов API выполняется только один раз после первых 30 минут. После 2 часов ожидания я снова запустил отладчик, и после этой строки кода PeriodicTask = ScheduledActionService.Find(periodicTaskName) as PeriodicTask я обнаружил, что PeriodicTask.LastExitReason = UnhandledException - person Milos Maksimovic; 01.10.2015
comment
Понимаю. В этом случае, как вы, вероятно, знаете, у вас есть ошибка. Вы можете разместить try/catch в стратегических точках и записать некоторую информацию в текстовый файл. - person Ladi; 01.10.2015
comment
Все кастомное в методе OnInvoke уже есть в try/catch и пишет в лог, как я уже сказал, но выполнение даже не доходит до этого кода после перезапуска. В любом случае спасибо за помощь, буду пробовать. Если я выясню, что происходит, я обязательно напишу это здесь. - person Milos Maksimovic; 01.10.2015