#iphone #windows-phone-7
#iPhone #windows-phone-7
Вопрос:
У меня есть приложение для Android, в котором служба, работающая 24/7, определяет местоположение GPS каждые 5 минут и отправляет на сервер. Это требование.
Могу ли я написать такую же службу для iPhone? Я не уверен, возможно ли это.
Могу ли я написать такую же службу для WP7? Я думаю, что раньше было невозможно запустить службу. Что-нибудь изменилось в 7.5?
РЕДАКТИРОВАТЬ: я не уверен, почему кто-то проголосовал против. Это конкретный вопрос «Да / нет».
Ответ №1:
Это возможно в WP7 с введением фоновых задач в Mango. На самом деле, существует встроенный механизм опроса GPS, предоставляемый API, который более эффективен при использовании аккумулятора.
Не уверен, что это займет до 5 минут, думаю, что это что-то большее, например, 30 минут. Это также не сравнимо со службой Windows, так что не идите на поводу у этого мышления. Фоновые задачи сильно ограничены, чтобы телефон оставался отзывчивым для пользователя — чтобы использовать их, вам нужно хорошо играть с требованиями.
Введение в фоновые задачи, в нем также говорится о том, что я упоминал о GPS. Загрузка и просмотр всей серии стоит вашего трафика и времени:
Не могу ответить за iPhone.
Комментарии:
1. Не могли бы вы немного уточнить? Могу ли я запустить свой код при опросе GPS или он отправляется в какое-либо хранилище, пока приложение не будет видно? Мне нужно немедленно отправить эти позиции GPS на сервер. Возможно?
2. Да, возможно, узнайте о фоновых задачах. Однако вы обнаружите, что вынуждены работать в жестких условиях (небольшая вычислительная мощность, короткое время), чтобы телефон поддерживал пользовательский интерфейс.
3. Адам, спасибо. Хотелось бы, чтобы это было возможно 8 месяцев назад, когда я писал приложение для Android. 30 минут все еще слишком много для моей конкретной потребности. Есть ли какой-либо способ имитировать меньший диапазон? Возможно, наличие нескольких задач, которые выполняются в разное время?
4. Вы не сможете добиться быстрого механизма опроса, и вы можете зарегистрировать только одну задачу, я думаю, для каждого приложения: blogs.infosupport.com/blogs/alexb/archive/2011/05/26 /…
5. Это имеет смысл. Я вижу, что это дает 15 секунд для завершения задачи. Этого будет недостаточно даже для определения местоположения GPS. Можно ли разделить GPS и использовать эти 15 секунд только для отправки обновлений на сервер?
Ответ №2:
Это также возможно на ios4 , но не будет запускаться по времени. Либо вы регистрируетесь для точного (gps) или неопределенного местоположения (местоположение Wi-Fi и глобальной сети), которое доступно для получения в фоновом режиме, но не всегда возможно отправить эти данные на сервер, потому что после 10 минут в фоновом режиме вашему приложению не разрешается поддерживать сетевое соединение. Поэтому вам нужно буферизировать эти данные и ждать, пока пользователь не запустит ваше приложение.
iOS отправляет уведомления в ваше приложение в зависимости от требуемой точности и в зависимости от фильтра расстояния
ios-приложения не различаются между службами и действиями (как в Android). все это объединено в одном приложении.
Комментарии:
1. Итак, приложение, подобное моему веб-сайту, в принципе невозможно с iOS?
2. это так. отслеживание возможно, но отправка трафика в реальном времени возможна только надежным способом, если приложение «открыто» (не в фоновом режиме)
3. Я понимаю, что это невозможно. В моем случае драйвер использует приложение, возможно, один раз в день для отправки сообщения или получения информации о загрузке. Но офису нужно все время видеть, где он находится. Итак, приложение закрыто большую часть времени (90% времени). Правильно ли я понимаю, что я не могу отправлять обновления на сервер примерно через 30 минут после последнего использования приложения?
4. Еще одно замечание. В Android я не поддерживаю HTTP-соединение. Я открываю ее каждый раз, когда выполняю обновление (каждые 15 минут)
5. Я думаю, что через 10 минут после закрытия приложения этому приложению запрещено запускать какой-либо сетевой трафик: ни открывать новое соединение, ни удерживать соединение открытым. Поэтому оперативные обновления будут невозможны (причина: экономия энергии аккумулятора). Но, может быть, есть какие-то хитрости (но тогда, я думаю, будет сложно попасть в app-store)
Ответ №3:
Здесь тоже есть «некоторые ограничения» (много), но, возможно, Microsoft Push services работает для вас:
Обзор push-уведомлений для Windows Phone
Поскольку опрос не является хорошей практикой для этого, в этом случае push работает лучше.
Ответ №4:
В WP7 Mango вы не можете получить новое местоположение от фонового агента. Следующий код вернет последнее доступное местоположение (до 15 минут):
private GeoPosition<GeoCoordinate> GetCachedLocation()
{
GeoCoordinateWatcher geoWatcher;
geoWatcher = new GeoCoordinateWatcher(); //Start a new watcher with default level of accuracy
geoWatcher.Start();
//Get latest cached position
GeoPosition<GeoCoordinate> position = geoWatcher.Position;
geoWatcher.Stop();
return position;
}
Как вы можете видеть, для этого используется GeoCoordinateWatcher. Согласно MSDN (http://msdn.microsoft.com/en-us/library/hh202962 (v = против 92).aspx):
Этот API, используемый для получения географических координат устройства, поддерживается для использования в фоновых агентах, но он использует кэшированное значение местоположения вместо данных в реальном времени. Кэшированное значение местоположения обновляется устройством каждые 15 минут.
Кроме этого, я не смог найти много информации. Вы могли бы создать GeoCoordinateWatcher с заданной точностью, но я не тестировал это. Возможно, это вернет последнее доступное кэшированное местоположение, которое удовлетворяет требованиям точности.