Как вы можете обновить данные о местоположении в Windows Phone в фоновом режиме?
Я только что прочитал, что хотя фоновые задачи Windows Phone 7.5 могут опрашивать местоположение, они на самом деле не опрашивают в режиме реального времени с GPS, а, скорее, вызовы API определения местоположения возвращают позицию в системном кэше, которая обновляется только каждые пятнадцать минут.
Это ограничение, конечно, полностью лишает законной силы любую попытку запустить навигацию в фоновом режиме, поскольку вы можете получить чертовски далекий от курса за пятнадцать минут, не говоря уже о том, что фоновая задача может запускаться только раз в тридцать минут или около того!
Тем не менее, навигационное приложение Nokia и, по сообщениям, приложение Runtastic продолжают отслеживать в фоновом режиме (то есть не только под экраном блокировки), и оба находятся на рынке, что означает, что они были одобрены, так что кто-нибудь знает, как им удалось сделать то, что SDK мол, не поддерживает?
Для справки, нам на самом деле не нужно отслеживать в реальном времени... может быть, раз в минуту или около того, и нам не нужна такая большая точность... может быть, 100 футов или около того... но нам нужно больше, чем мы Был дан. Мы просто не знаем, как они это делают в утвержденных приложениях.
2 ответа
Вы сможете получить местоположение только тогда, когда ваш PeriodicTask
выполняется (примерно каждые ~30 минут, в зависимости от планирования ОС). Данные о местоположении, из которых он выбирает GeoCoordinateWatcher
будет из кеша ОС, а не напрямую из оборудования GPS. Если ничего не запущено, ОС будет обновлять его грубыми данными примерно каждые 15 минут. Однако, если приложение выполнило и получило детальные данные аппаратного обеспечения GPS, то это будут данные, которые вы получите в своем PeriodicTask
, Вы можете увидеть примеры этого, получив доступ к GPS в приложении переднего плана и принудительно планируя свои PeriodicTask
с ScheduledActionService.LaunchForTest
,
Исходя из моего опыта работы с фоновыми задачами, вы не сможете достичь того, что хотите, с помощью периодических или ResourceIntensive фоновых задач.
Несмотря на документацию, утверждающую, что они запускаются каждые 30 минут, мой опыт показывает, что они работают спорадически и непредсказуемо. За последние 14 часов периодическое задание моего приложения выполнялось в общей сложности 6 раз, и это довольно стабильно каждый день - оно выполняется примерно раз в два часа. Я считаю, что для ресурсоемких задач они обычно выполняются примерно два раза в ночь. Я полагаю, что ОС должна сбалансировать все процессы на телефоне и все другие приложения, требующие выполнения своих фоновых задач, поэтому иногда ваши не справляются. Очевидно, ваш пробег может варьироваться в зависимости от вашего телефона (Lumia 800 в моем случае) и приложений, которые вы установили.
Если вы хотите написать приложение, которое отслеживает ваше местоположение раз в минуту, я бы посоветовал включить его под экраном блокировки, отключив обнаружение простоя, и убедитесь, что у него мало места в памяти для экономии заряда батареи.