Разработка поведения приложения iPhone iOS4: выполнение в фоне по сравнению с завершающимся приложением

Мы разрабатываем приложение iPhone GPS для водителей.

Как Вы, вероятно, знаете, iOS4 представленная многозадачность, таким образом, наше приложение может работать в фоне - и это. Это - часть своей функциональности.

Проблема со стандартным методом заключительных приложений на iOS4. Вот два сценария:

1) Пользователь хочет поместить приложение в фон:

Как правило, на iPhone iOS4 это столь же легко как теснить кнопку.

2) Пользователь хочет выключить приложение (т.е. после прибытия в его пункт назначения):

Стандартная процедура iPhone iOS4 следующие:

  • тесните кнопку - приложение переходит к фону
  • тесните кнопку дважды - список запущенных приложений появляется
  • коснитесь и держите один из значков приложений - все значки 'встряска' и '-' знак появляются на каждом
  • коснитесь '-' знак в пользователе значка приложения хочет завершиться

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

Конечно, Вы не можете изменить поведение 'домашней' кнопки из Вашего приложения (чтобы быть принятыми к AppStore). Также я не думаю, что это было бы хорошее решение для изменения ожидаемого поведения на что-то совершенно другое, чем другие приложения на платформе iPhone.

Что Вы думаете об этом? Вы знаете какое-либо хорошее решение. У нас есть одна идея, но я не хочу предлагать что-либо Вам все же.

Наша идея для решения очень проста: Просто, покажите маленькую 'x' кнопку в верхнем правом экранном углу. Ответвление его завершает приложение (возможно, после некоторого вопроса о подтверждении).

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

Что Вы думаете?

7
задан grzaks 23 July 2010 в 17:00
поделиться

8 ответов

Может быть, есть возможное решение? Это действительно зависит от вашего приложения. Вот что я сделал для приложения, которое разработал для работы с GPS в фоновом режиме.

Я настоятельно рекомендую вам ознакомиться с API iOS4 startMonitoringSignificantLocationChanges в CLLocationManager.

Во время движения он будет давать вам обновления с точностью примерно до 500 метров каждые 2 км или около того. Если этого недостаточно для вашего приложения, вы можете включать оборудование GPS ТОЛЬКО, когда ваше приложение выполняется системой. Таким образом, вы сможете получать очень точные показания каждые ~ 2 км, но сэкономите заряд батареи.

Вы также можете использовать интеллектуальные методы поиска пути и отображения, чтобы «подделать» отсутствующие данные.

Я провел эксперимент с фоновыми событиями GPS на 8 iPhone 3GS. Результаты опубликованы здесь: iPhone фоновый GPS / предварительный анализ события signficantLocationChange

3
ответ дан 6 December 2019 в 19:31
поделиться

Поскольку вам нужно работать в фоновом режиме для определения местоположения, а Apple не позволит вам завершить работу вашего собственного приложения, вы застряли в том, что пользователь должен понимать, что им нужно закрыть приложение самостоятельно, чтобы сэкономить электроэнергию.

Быстрое решение - отключить службы определения местоположения после достижения пункта назначения. Вы даже можете предупредить пользователя об этом, и как только он нажмет кнопку «ОК», вы остановите его запуск и / или работу в фоновом режиме, если приложение приостановлено.

1
ответ дан 6 December 2019 в 19:31
поделиться

Apple рекомендует сделать следующее (Руководство по программированию приложений для iPhone):

Приложения могут регистрироваться только для значительных изменений местоположения. (Рекомендуется) Служба определения местоположения значительных изменений доступна в iPhone OS 4 и более поздних версиях для устройств с сотовым радио. Он предлагает способ получения данных о местоположении с низким энергопотреблением и настоятельно рекомендуется. Новые обновления местоположения предоставляются только в случае значительного изменения положения пользователя. Если приложение приостанавливается во время работы этой службы, новые обновления местоположения приведут к тому, что приложение будет активировано в фоновом режиме для их обработки.Точно так же, если приложение завершается во время работы этой службы, система автоматически перезапускает приложение, когда становятся доступными новые данные о местоположении.

Вы пробовали использовать его, вызывая метод startMonitoringSignificantLocationChanges CLLocationManager?

Закройте приложение только в крайнем случае. Вы можете отключить службы определения местоположения, когда они не используются, не выходя из приложения. Вы можете вызвать stopUpdatingLocation в CLLocationManager, чтобы отключить его.

- (void) stopUpdatingLocation

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

6
ответ дан 6 December 2019 в 19:31
поделиться

Если пользователь активно движется по маршруту и ​​переходит в фоновый режим, продолжайте использовать GPS, если он находится в пункте назначения, используйте предложенные выше предложения и переключитесь на startMonitoringSignificantLocationChanges или выключите службы определения местоположения. Серая область означает, что пользователь находится рядом с пунктом назначения и завершил работу с GPS, но не потрудился завершить навигацию. то есть их пункт назначения находится не там, где он находится, по мнению GPS, и т. д. Теперь вы активно перемещаетесь, но никогда не достигнете пункта назначения. Чтобы не беспокоить пользователя или не полагаться на некоторые настройки, я бы предложил следить за отсутствием движения или, по крайней мере, отсутствием прогресса, а затем использовать это как признак того, что пользователь больше не полагается на вас, и переключиться на навигацию с низким энергопотреблением.

0
ответ дан 6 December 2019 в 19:31
поделиться

Передо мной нет Xcode (ПК на работе), поэтому я не могу найти какие-либо методы, которые вы могли бы использовать, но я считаю, что приложение TomTom выполняет какие-то мониторинг при работе в фоновом режиме, потому что я помню, как получал уведомление о том, что он переходит в спящий режим. Напомню, это произошло через 5-10 минут.

0
ответ дан 6 December 2019 в 19:31
поделиться

Можно ли отключить GPS-мониторинг из приложения? Не могли бы вы добавить кнопку, чтобы просто отключить это, вместо того, чтобы закрыть все приложение? т.е. Переведите приложение в режим сна, как было упомянуто о приложении TomTom.

Если это так, вы можете каким-то образом изменить пользовательский интерфейс, чтобы пользователь мог видеть, что активность GPS не запущена, поэтому приложение не работает полностью.

0
ответ дан 6 December 2019 в 19:31
поделиться

Если пользователь ведет машину и движется, ему нужна точная информация, это правда. Это не означает, что вы не можете использовать startMonitoringSignificantLocationChanges, не так ли?

Другими словами, используйте тайм-аут для прекращения точного мониторинга (и питания GPS-оборудования), когда вы перестали получать "значительные изменения" в течение настраиваемого периода времени. Начните точный мониторинг снова, когда вы снова начнете их получать.

1
ответ дан 6 December 2019 в 19:31
поделиться

У меня есть решение, которое я использую в похожем приложении. У меня есть кнопка «Фоновый режим» на панели навигации. Пользователь щелкает по нему, и он получает уведомление о том, что, когда он нажимает кнопку «Домой», он будет работать в фоновом режиме. Каждый раз, когда приложение запускается или повторно активируется, повторное нажатие на «Домой» приведет к тому, что приложение не запустится.

Затем, когда нажимается кнопка «Домой», я проверяю флаг, чтобы увидеть, должны ли мы перейти в фоновый режим. Я избегаю фонового режима, просто отключая GPS (который, когда местоположение задается в UIbackgroundModes, вызывает приостановку работы приложения)

Имеет смысл?

0
ответ дан 6 December 2019 в 19:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: