UIApplication openURL фон - PullRequest
       12

UIApplication openURL фон

7 голосов
/ 13 ноября 2010

В моем приложении для iOS 4 мне нужно открыть URL-адрес из фона, в указанное пользователем время.Однако по какой-то причине я не могу запустить URL-адрес из фона по какой-то причине.Вот мой код для открытия URL:

if (![[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.stackoverflow.com"]])
{
     // the URL wasn't opened. we will ignore this for now.
}

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

Ответы [ 3 ]

5 голосов
/ 13 ноября 2010

Я думаю, что нашел его (не работает на симуляторе, потому что он передает команды на терминал на Mac, так как для симулятора нет командной строки).Используйте это:

system([[NSString stringWithFormat:@"uiopen \"%@\"", myUrlToOpen] UTF8String]);

Это передаст команду uiopen (найденную через джейлбрейк) на устройство, заставив его открыть этот URL.Я надеюсь, что это помогает другим в моем положении.

4 голосов
/ 13 ноября 2010

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

Решение было бы поместить его в основной поток и, таким образом, оставить приложение в момент запуска кода.Это не похоже на то, что вы хотите, извините.Если вы хотите перейти по URL-адресу в вашего приложения, вы можете представить UIWebView.

3 голосов
/ 13 ноября 2010

Это не поддерживается iOS.Согласно соответствующему разделу Руководства по программированию iOS для Apple :

Поддержка некоторых типов фонового выполнения должна быть заранее объявлена ​​приложением, которое использует их [через] массив, содержащийодна или несколько строк со следующими значениями:

  • audio - приложение воспроизводит звуковой контент для пользователя в фоновом режиме.
  • location - приложение информирует пользователей об их местонахождении,даже при работе в фоновом режиме.
  • voip - Приложение предоставляет пользователю возможность совершать телефонные звонки с использованием подключения к Интернету.

...

В дополнение к предыдущим клавишам iOS предоставляет два других способа работы в фоновом режиме:

  • Приложения могут запрашивать у системы дополнительное время для выполнения данной задачи.
  • Приложения могутпланировать доставку локальных уведомлений в заранее установленное время.

Ваше использование не соответствует ни одному из разрешенныхвиды многозадачности.

...