Разработка поведения приложения iPhone iOS4: работа в фоновом режиме или завершение работы приложения - PullRequest
7 голосов
/ 23 июля 2010

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

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

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

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

Как правило, на iPhone iOS4 это так же просто, как нажать кнопку «домой».

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

Стандартная процедура iPhone iOS4 выглядит следующим образом:

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

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

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

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

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

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

Что ты думаешь?

Ответы [ 9 ]

6 голосов
/ 23 июля 2010

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

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

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

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

- (void) stopUpdatingLocation

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

3 голосов
/ 23 июля 2010

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

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

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

Вы также можете использовать интеллектуальные методы поиска путей и картографирования для «подделки» недостающих данных.

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

2 голосов
/ 12 апреля 2011

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

Затем добавьте это приложение, чтобы оно вызывалось при нажатии кнопки «Домой».

- (void)applicationWillResignActive:(UIApplication *)application {
    if (Arrived) {
       exit(0);
    }
}

Это фактически полностью отключит приложение, когда они нажмут кнопку «Домой», но только если они указали, что прибыли. В противном случае это будет в фоновом режиме.

1 голос
/ 27 июля 2010

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

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

1 голос
/ 23 июля 2010

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

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

0 голосов
/ 31 июля 2010

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

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

Имеет смысл?

0 голосов
/ 31 июля 2010

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

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

0 голосов
/ 31 июля 2010

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

0 голосов
/ 23 июля 2010

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

...