Вопрос

Моему приложению требуется подключение к Интернету.Кажется, что если я некоторое время оставлю свой iPhone бездействующим, он отключит 3G-соединение.Как только я разбудил его (сдвиньте, чтобы разблокировать) и запустил приложение, он не может подключиться к Интернету.Сначала мне нужно запустить Youtube или Safari, затем подключиться к Интернету, затем мне нужно закрыть Youtube/Safari, а затем я могу использовать свое приложение для входа в свою службу.

Не могли бы вы сообщить мне, как я могу активировать соединение 3G из моего приложения (чтобы я мог использовать свое приложение сразу после того, как оно выйдет из состояния ожидания, и мне не приходилось запускать другие приложения, такие как Youtube/Safari?

Спасибо.

Это было полезно?

Решение

Чтобы отключить таймер простоя, взгляните на свойствоdleTimerDisabled класса UIApplication.

От Apple:

Значение по умолчанию этого свойства - нет.Когда большинство приложений не имеют никаких прикосновений в качестве пользовательского ввода в течение короткого периода, система помещает устройство в состояние «сна», где смут экрана.Это делается в целях сохранения власти.Тем не менее, приложения, которые не имеют пользовательского ввода, за исключением акселерометра - например, и могут, - могут, установив это свойство на «да», отключите «таймер холостого хода», чтобы предотвратить системный сон.

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

Другие советы

Очевидно, есть другое лучшее решение, но вы можете загрузить пустую страницу с помощью:

[NSString stringWithContentsOfUrl ... ]

Соединение будет установлено, если это необходимо.

Только NSURLConnection (и любые API-интерфейсы, наложенные на него) повторно инициализирует соединение для передачи данных после выхода из режима сна.Чтобы повторно инициализировать соединение для передачи данных, создайте фиктивный файл. NSURLConnection на нелокальный адрес и сразу отменить его;тогда socket API будет работать как положено.

На форумах разработчиков есть сообщение, где разработчик Apple подробно объясняет это (но сейчас я не могу его найти).

Вы уверены, что устанавливаете соединение правильно?Мое приложение делает то же самое, используя сокеты, и у него нет проблем с восстановлением соединения после сна устройства.Используйте API Reachability в платформе SystemConfiguration, чтобы получать уведомления о доступности покрытия и после этого предпринимать попытку подключения.Обратите внимание, что после пробуждения устройства для подключения к Интернету должен пройти период времени — от нескольких секунд до пары минут, поэтому наберитесь терпения.

Существует образец Reachability от Apple. Также выполните поиск по stackoverflow, чтобы узнать о достижимости, и вы найдете дополнительные советы по его реализации.

Собственно, та же проблема возникает и при изменении настроек сети на телефоне между запусками приложения.Например, предположим, что вы используете соединение WIFI при запуске приложения.Затем вы закрываете приложение и отключаете WIFI, чтобы устройство использовало сеть оператора.Когда вы перезапустите приложение, сокет не сможет подключиться, если вы не проделаете трюк с фиктивным NSURLConnection (или не запустите браузер перед запуском приложения).

Кроме того, у меня не сработала отмена NSURLConnection сразу после его инициализации (с помощью ConnectionWithRequest или initWithRequest).Либо не отменяйте запрос, либо подождите некоторое время, прежде чем отменить его (например.с PerformSelector:withObject:afterDelay:).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top