2012-04-28 2 views
1

У меня есть приложение monotouch, которое имеет таймер и получает данные с сервера. После получения данных я хочу показать уведомление в строке состояния. Это хорошо, когда приложение находится на переднем плане. Когда приложение находится в фоновом режиме, ни таймер, ни уведомление не работаютUILocalnotification не появляется, когда приложение находится в фоновом режиме

Пожалуйста, помогите мне в устранении этой проблемы.

+0

+1, действительно раздражает, и нет очень хорошо продуманы решение. –

ответ

1

Когда приложение iOS переходит в приостановленное (то есть фоновое) состояние, оно останавливает свои таймеры и отключает уведомления о locl (и выполняет некоторые дополнительные действия, связанные с оптимизацией памяти). Возможное решение (только JB) для отображения пользовательских предупреждений, когда ваше приложение находится в фоновом режиме, - это запустить сервер (настоящий unix-сервер, который не беспокоит приложение, получающее фоновые рисунки!) И использовать недокументированную функцию CFUserNotificationDisplayAlert() (просто google it).

+0

Спасибо за ответ, но это единственный способ? Что делать, если я хочу предупредить пользователя, когда приложение находится в фоновом режиме? –

+0

Извините, но Apple является ограничительной. Есть этот недокументированный метод, который вы можете использовать и который был там/работал целую вечность, но ваше приложение деактивируется, когда оно помещено в фоновом режиме. –

0

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

Вы делаете это, вызывая UIApplication.BeginBackgroundTask. Это позволит вам работать немного, и метод, который вы передаете, будет вызван незадолго до истечения срока действия льготного периода.

0

Когда у вас есть приложение с регистрами для обновлений местоположения, оно, как представляется, всегда работает в фоновом режиме в определенной степени, поскольку вы получаете значительные изменения местоположения, и вы получаете области ввода/выхода, поэтому вы используете код приложения или пробуждение для запуска кода ... проблема в том, что UILocalnotification не вызывает звуковую и предупреждающую информацию (но все вызовы отображаются в центре уведомлений ...) Большая проблема заключается в том, что значимое местоположение изменяется, и области ввода/выхода бесполезны, если вы не можете достоверно уведомить своего пользователя .... является CFUserNotificationDisplayAlert() единственным решением для запуска предупреждения пользователю ...? это работает ? будет ли ваше приложение отклонено, если вы его используете?

1

У вас есть приложение для запуска в фоновом режиме, добавьте регистры App для обновлений местоположения в info.plist, создайте регистр Singleton CLlocation для значительного изменения местоположения, и все будет готово, ваше приложение будет воскрешено каждый раз, когда есть значительное изменение местоположения

+0

Спасибо за ответ Бретт ... Но как насчет ситуации, когда я держу свой телефон в одном месте (скажем, нет изменения местоположения) ... Будет ли приложение работать на фоне? –

+0

хорошо из того, что я знаю и понимаю, он будет работать в фоновом режиме для ограниченного и неопределенного количества времени, после чего он попадет на подвешенную сцену, а затем красит ... lol http://developer.apple.com/library/ ИОС/# ДОКУМЕНТАЦИЯ/iPhone/Концептуальное/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html, но есть другие фоновые режимы, на которые вы можете подписаться, извините, у меня нет ответа для вас ... – Brett

0

Я получил это, работая следующим образом: (Не хороший дизайн, но рабочий) Добавлена ​​поддержка местоположения в info.plist, создайте диспетчер вызовов и продолжайте предоставлять услуги определения местоположения. В том же цикле графики UIlocalnotification.

Он отлично работает. :)

Примечание: Один вопрос заключается в том, что она даст пользователю propmpt как «Это приложение использует ваше местоположение, Вы хотите о позволяют»