Возможно ли создать фоновую службу для Windows Phone 7.5 или iOS?

#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. Загрузка и просмотр всей серии стоит вашего трафика и времени:

http://channel9.msdn.com/Series/Mango-Jump-Start/Mango-Jump-Start-06-Windows-Phone-Multi-tasking—Background-Tasks

Не могу ответить за 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 с заданной точностью, но я не тестировал это. Возможно, это вернет последнее доступное кэшированное местоположение, которое удовлетворяет требованиям точности.